【问题标题】:Use of session_destroy() instead of unset($_SESSION['userName']) not working使用 session_destroy() 而不是 unset($_SESSION['userName']) 不起作用
【发布时间】:2014-05-27 11:48:08
【问题描述】:

我在 MVC 模式中使用了 session_destroy。 如果我单击注销链接,它将重定向正确的 url 但页面消失。它在 Firefox 中显示以下错误。

页面未正确重定向

Firefox 检测到服务器正在重定向对该地址的请求 一种永远不会完成的方式。

此问题有时可能是由禁用或拒绝接受 cookie 引起的。”

这是我用于注销的功能。

注销功能:(不工作)

    public function Logout(){
    session_destroy();
    $this->redirect('index.php?r=admin/login');
    }

我有unset($_SESSION['userName']) 会话变量。它工作正常。但是session_destroy 不在那个地方工作。 这是什么原因?

注销功能:(工作)

public function Logout(){
unset($_SESSION['userName']);
$this->redirect('index.php?r=admin/login');
}

【问题讨论】:

标签: php session


【解决方案1】:

您可以使用其他方式删除会话,例如:-

$_SESSION = array(); // define it with empty array and clear the session values

或者使用再次启动会话然后销毁

session_start();
session_destroy();

更多信息:- why session_destroy() not working

为了更好地理解,您可以阅读 @Chen Asraf 答案

【讨论】:

  • 你在销毁后检查过其他页面上的会话变量吗?或尝试销毁后在同一页面上打印
  • 或者可能是您在该页面上有任何签入代码导致重定向问题
【解决方案2】:

来自session_destroy的PHP文档:

session_destroy() 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。要再次使用会话变量,必须调用session_start()

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此。

因此,为了真正摆脱会话,您还必须像以前一样unset 或覆盖$_SESSION 超全局。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2018-08-19
    相关资源
    最近更新 更多