2013-10-10 118 views
2

当我尝试使用以下注销时:session_destroy();然后它工作。但问题是,我还有一个会议购物车。所以session_destroy();不适合我。当我使用unset($_SESSION['username']);功能似乎工作。但是,当我回到我的accountpage,我只是回到登录我的注销脚本是这样的:。PHP会话未设置或PHP会话破坏

<?php 
unset($_SESSION['username']); 
unset($_SESSION['id']); 

header('Location: index?page=home'); 
?> 

我与这片用户的代码进行核对所登录(谁能告诉我或者这是安全的吗?)

<?php if (!$_SESSION['username'] && !$_SESSION['id']){ ?> 
<?php header ('Location: index?page=home'); ?> 
<?php } ?> 

这是您需要的信息(我认为)。如果你需要更多,请问我。

所以,我的问题在短版本中:如何销毁我的会话而不破坏我的购物车会话?

谢谢你们。

回答

4

你能在这里尝试session_write_close()?有一个PHP配置应该在脚本结束后自动为你做,但你的PHP可能配置不同。

<?php 
unset($_SESSION['username']); 
unset($_SESSION['id']); 

session_write_close(); 

header('Location: index?page=home'); 
?> 

为了调试的目的,你可以试试这个:

<?php 

echo $_SESSION['id'].' - '.$_SESSION['username']; 

if(!$_SESSION['username'] && !$_SESSION['id']){ 
    header ('Location: index?page=home'); 
} 

?> 
+0

当我使用这个函数时,它解决了这个问题:'session_write_close();'感谢您的帮助! – Appel

+0

不客气!如果你想知道为什么会发生这种情况,请阅读我的答案,从这个SO问题:http://stackoverflow.com/questions/19119354/is-each-session-call-is-separate-call-to-服务器/ 19119831#19119831 – MonkeyZeus

1

可能有可能,您忘记了在注销脚本中调用session_start();函数?

<?php 
session_start(); 

unset($_SESSION['username']); 
unset($_SESSION['id']); 

header('Location: index?page=home'); 
+0

我有一个在session_start();在我的注销脚本的顶部。 – Appel

+0

@Appel因为实际上其他一切都看起来很理智......我唯一能做的就是猜测...... – bwoebi

0

以最简单的方式使用

<?php 
session_start(); 
if(empty($_SESSION['user']) && empty($_SESSION['id'])) 
{ 
echo "please login"; 

} 

unset使用取消设置变量,session_destroy为完全地摧毁会议,所以我建议你应该使用这两种为:

<?php 
session_start(); 
unset($_SESSION['user']); 
unset($_SESSION['id']); 
session_destroy(); 
header("location:yourpage.com"); 
?>