1

好的,这开始让我烦恼,因为它非常简单并且可以在其他地方使用,但是在当前的任务中它没有,所以我开始了!

有一个主页依赖于设置的会话变量或不显示某些信息。假设此页面位于此处:http ://dev.example.com/some_page.php 例如

if (isset($_SESSION["some_var"])) { /* it's set so do whatever */ }
else { /* not set so do whatever else.. */ }

有一个由 jQuery $.ajax() 触发的 ajax 页面调用并将此会话变量设置为 null 以更改主页的操作,假设它位于此处:http ://dev.example.com/ajax/some_ajax_page .php

它的代码如下所示:

<?php
    if (!isset($_SESSION)) session_start();
    $_SESSION["some_var"] = null;

当ajax触发后重新加载主页面时,会话变量“some_var”仍然完好无损,但如果在ajax页面中的“null”之后回显,则将其设置为“null”。

基本上它似乎没有写入全局会话,只写入本地路径。

这有意义吗?

请问有什么帮助吗?另外,如果您想进一步澄清任何事情,请告诉我!

4

5 回答 5

1

摆脱对会话的检查。如果这是您调用的唯一文件,请执行以下操作:

<?php
   session_start();
   $_SESSION["some_var"] = null;

另外,您是否使用在每个请求上自动重新生成会话 ID 的框架?如果是这样,您可能会遇到问题。

如果您有一台开发机器可以使用并具有这样做的权限,您可以手动删除 /var/lib/php/session/ 目录中的所有会话。当您使用您的站点时,应该只创建一个会话文件。您还可以检查该文件以查看写入的内容和时间。

于 2012-06-19T16:30:05.137 回答
1

session_start()函数将为您处理创建和持久会话的尝试,由 PHP 的配置定义,或者如果您设置自己的保存处理程序,则可以在运行时选择。确保您阅读了此处的文档:

http://us2.php.net/manual/en/function.session-start.php

对于您的代码,您要确保session_start()在要保存或访问会话变量的任何页面的开头调用。所以你上面的页面可能看起来像:

 <?php

 session_start();

 $_SESSION['myvar'] = 'some value';

然后在不同的页面中,您可以尝试访问该值:

 <?php

 session_start();

 if ($_SESSION['myvar'] == 'some value') {

   // do something

 }

那应该可以正常工作。

于 2012-06-19T16:31:56.610 回答
0

似乎您正在使用不同的会话变量。一个用于 AJAX 调用,另一个用于普通页面调用。当您没有以相同的方式初始化两个调用(或使用初始化会话的相同起始代码)时,可能会发生这种情况。确保 session_start() 两个调用使用相同的session_id

// try in both calls
session_start();
echo session_id(); // must return the same id in both calls
于 2012-06-19T16:31:37.020 回答
0

为什么不使用未设置?这是正确的方法。

于 2012-06-19T16:41:30.493 回答
0

原来我正在处理的应用程序有它自己的 session_handler,如果在请求会话数据之前没有包含它,它总是无效的,即使它是相同的 session_id。

于 2012-06-19T21:39:58.820 回答