PHP会话销毁试图破坏未初始化的会话

时间:2014-01-31 09:43:40

标签: php session

我读过几个主题,如:

Error — session_destroy() — Trying to destroy uninitialized sessionWarning: session_destroy(): Trying to destroy uninitialized sessionWarning: session_destroy(): Trying to destroy uninitialized session with phpCas

他们都没有帮助我。

public function forbidden(){
    if(!isset($_SESSION)){ session_start(); }

    if(!isset($_SESSION['email']) || !isset($_SESSION['id'])){
        $this->error_404();
    }else{

        if(!isset($_COOKIE['data'])){
            session_destroy();
            $this->error_404();
        }

        if($_COOKIE['data'] != sha1($_SESSION['email'])){
            session_destroy();
            unset($_COOKIE["data"]);
            setcookie("data", false, time() - 3600, '/');
            $this->error_404();
        }
    }
}
  

警告:session_destroy()[function.session-destroy]:试着去   破坏未初始化的会话

我确实在第二个session_destroy();上收到了该错误,会话已初始化,所以我没有得到它?

3 个答案:

答案 0 :(得分:0)

您正在拨打session_destroy()两次。

如果您的Cookie未设置,那么它将不会等于$_SESSION['email']吗?

将您的代码更改为:

public function forbidden(){
    if(!isset($_SESSION)){ session_start(); }

    if(!isset($_SESSION['email']) || !isset($_SESSION['id'])){
        $this->error_404();
    }else{

        if(!isset($_COOKIE['data'])){
            session_destroy();
            $this->error_404();
        } elseif($_COOKIE['data'] != sha1($_SESSION['email'])){
            session_destroy();
            unset($_COOKIE["data"]);
            setcookie("data", false, time() - 3600, '/');
            $this->error_404();
        }
    }
}

答案 1 :(得分:0)

在stackoverflow上阅读此问题的答案
why session destroy not working
将此代码放在您的PHP文件的第一个和结束

<?php
ob_start();
?>
Your Code Here...
<?php
ob_flush();
?>


你的session_destroy()调用两次。
或删除服务器上的所有会话...

答案 2 :(得分:0)

问题是您调用会话销毁两次。如果未设置$_COOKIE['data'],那么$_COOKIE['data'] != sha1($_SESSION['email'])也会返回false,它会尝试再次销毁会话。

    if(!isset($_COOKIE['data'])){
        session_destroy();
        $this->error_404();
    }

    if($_COOKIE['data'] != sha1($_SESSION['email'])){
        session_destroy();
        unset($_COOKIE["data"]);
        setcookie("data", false, time() - 3600, '/');
        $this->error_404();
    }

在另一个

中进行检查
     if($_COOKIE['data'] != sha1($_SESSION['email'])){
        if(!isset($_COOKIE['data'])){
        session_destroy();
        $this->error_404();
        }
        else
        {
        unset($_COOKIE["data"]);
        setcookie("data", false, time() - 3600, '/');
        session_destroy();
        $this->error_404();
        }
    }

如果cookie数据无效,可能是因为没有cookie。这样,如果它无效,它会检查它是否存在。如果确实存在且无效,则会执行某些操作。如果没有,它会做其他事情。