【问题标题】:PHP & AJAX Sessions : Session variables different on AJAX page than on page called fromPHP & AJAX 会话:AJAX 页面上的会话变量与调用的页面不同
【发布时间】:2011-08-17 15:22:08
【问题描述】:

我有一个登录页面,而不是涉及破坏会话并启动新会话。我在 Chrome 和 Firefox 之间的结果非常不一致。

我正在使用以下方式清除会话:

session_unset();
session_destroy();
session_start();
$_SESSION = array(); 

但会话中的变量似乎仍然存在,直到我刷新页面然后它们消失。我的第二个问题是关键的 $_SESSION 变量在从这个登录页面调用的 ajax 页面上是不同的。这会导致 ajax 页面出现大问题和不一致的结果。

销毁会话并使用可用于 ajax 页面的新变量设置它的最佳方法是什么?

【问题讨论】:

  • 您能否提供一些进一步的代码来查看您在何处销毁会话,以及您如何/在何处调用未消失的会话变量?你能举一个你的 AJAX 调用的例子吗?

标签: php ajax session


【解决方案1】:

如果您使用会话 cookie,您也必须“删除”它们。

$cookie_params = session_get_cookie_params();

setcookie(
    session_name(),
    false,
    strtotime('2000-01-01')
    $cookie_params['path'],
    $cookie_params['domain'],
    $cookie_params['secure']
);

当然,在您发送响应之前,浏览器不会删除 cookie。
新会话将在下一个请求时创建。

PS:说明书上写着:

仅将session_unset() 用于不使用$_SESSION 的旧代码。

【讨论】:

    【解决方案2】:

    我找到了:

    session_unset();
    session_destroy();
    session_start();
    $_SESSION = array();
    

    非常难以预测,并且在浏览器之间产生不同的结果,这对于 PHP 来说是不寻常的。

    为了解决,我简单地将其替换为:

    session_start();
    $_SESSION = array(); 
    

    我知道这并不能完全清除和替换会话,但我真正需要的是要清除的会话。会话具有相同 session_id 的事实在我的场景中并不重要。

    希望这可以帮助一些和我一样的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2017-08-26
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2016-06-21
      相关资源
      最近更新 更多