php会话vars remian在页面之间重新生成

时间:2014-12-22 23:18:02

标签: php ajax session

所以,如果有人登录或注销,我一直在尝试在我的页面中重新生成会话ID。我运行这段代码:

public static function regenerateSession() {

    $_SESSION = array();

    session_regenerate_id( true );

    return true;

}
在ajax调用的脚本中。我在每一步都记录会话变量,实际上,会话ID发生变化,$ _SESSION数组清空。然后,在同一页面上,我将一些新变量加载到新会话ID下的$ _SESSION,回显一下然后脚本结束。 成功后,javascript得到这个PHP脚本的回声,重定向到另一个页面,我也记录会话变量。在新页面上的session_start()之后,我进入我的日志,会话,在重新生成后确实具有新的id,在重新生成后分配的新变量,以及前一个会话的会话变量及其先前的值!

我检查了我的php.ini,我的session.cookie_secure被注释掉了。我取消注释它,我把它改为0,重新启动apache但没什么新东西。有没有人知道我做错了什么?

更新1:

我也试过这段代码:

public static function regenerateSession() {

    $_SESSION = array();

    setcookie(session_name(), '', time() - 42000);

    session_regenerate_id( true );

    return true;

}

但效果相同......

更新2

我也试过了:

public static function regenerateSession() {

    $_SESSION = array();

    session_unset();

    setcookie(session_name(), '', time() - 42000);

    session_regenerate_id( true );

    return true;

}

但仍然没有

更新3

我也试过了:

public static function regenerateSession() {

    setcookie(session_name(), '', time() - 42000);

    session_destroy();

    $_SESSION = array();

    session_start();

    session_regenerate_id( true );

    return true;

}

什么。旧的价值观仍然与新的价值观保持一致

1 个答案:

答案 0 :(得分:0)

猜测一下,浏览器发送两个会话cookie,PHP只是将两个找到的会话合并在一起?

最好的方法是将旧会话cookie设置为零生命周期,以便客户端删除cookie并且不再发送它。

如果需要,销毁会话,但如果要完全删除会话,则需要执行所有三项操作

  1. 删除Cookie setcookie(session_name(), '', time() - 42000);
  2. 销毁会话session_destroy();
  3. 空会话变量$_SESSION = array();
  4. 开始新会话session_start();
  5. 另请查看类似问题的答案:https://stackoverflow.com/a/758825/1234469