我读过几个主题,如:
Error — session_destroy() — Trying to destroy uninitialized session,Warning: session_destroy(): Trying to destroy uninitialized session,Warning: 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();
上收到了该错误,会话已初始化,所以我没有得到它?
答案 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。这样,如果它无效,它会检查它是否存在。如果确实存在且无效,则会执行某些操作。如果没有,它会做其他事情。