0

我试图通过单击注销来销毁会话,但这不起作用。

<?php
session_start();
if(isset($_SESSION['user_name']))
{ 
   session_destroy();   
   session_unset();     
   header('Location:Login2.php');
 }
 else
 {
    echo "error";
 }
 ?>

它进入 else 部分意味着显示错误。

4

2 回答 2

1

你有很多不需要的代码。例如,只有当用户实际登录正确时才会显示您的注销链接,因此if-else声明中确实没有意义。

将其缩短为:

<?php

session_start();
session_destroy();
header('Location:Login2.php');

?>

我的意思是,如果您要销毁会话,那么检查天气或用户未登录确实没有意义。假设路径http://yourdomain.com/logout.php如果用户未登录,则可以很好地指向该脚本在并且他以某种方式访问​​了这条路径并没有真正发生任何事情,但是如果他已登录,您真的不应该关心是否设置了 SESSION 变量,因为无论如何您都将销毁它。

于 2013-10-15T16:52:49.040 回答
0

调用session_destroy()使session_unset()重复和不必要的需要。还要调用die()after header(),否则其他所有内容仍然执行并且重定向失败。

<?php
session_start();
if(isset($_SESSION['user_name']))
{ 
   session_destroy();   
   header('Location: Login2.php');
   die();
}
else
{
   echo "error";
}
?>

仍然有很多冗余的逻辑和代码,所以这里是最佳解决方案:

注销.php

<?php
session_start();
session_destroy();   
header('Location: Login2.php');
die();
?>
于 2013-10-15T17:03:07.233 回答