PHP会话未设置或PHP会话销毁

时间:2013-10-10 17:51:45

标签: php session login logout

当我尝试使用session_destroy();注销时,它就可以了。但问题是,我还有一个带有会话的购物车。所以session_destroy();对我来说不是一个选择。当我使用unset($_SESSION['username']);功能时,它似乎正常工作。但是当我回到我的帐户页面时,我刚刚重新登录。我的注销脚本如下所示:

<?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 } ?>

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

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

谢谢你们。

3 个答案:

答案 0 :(得分: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');
}

?>

答案 1 :(得分:1)

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

<?php
session_start();

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

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

答案 2 :(得分: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");
?>