2013-10-15 284 views
0

我试图销毁点击登出时的会话,但那不起作用。会话销毁错误

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

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

+2

然后'$ _SESSION [ 'USER_NAME']'是显然没有设置。 – Wrikken

+0

您是否检查过$ _SESSION ['user_name']'的值? –

+0

@RafaelBarros No..Value $ _SESSION ['user_name']没有得到.. – user2870941

回答

1

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

它缩短为:

<?php 

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

?> 

我的意思是,如果你要在那里摧毁会议确实是在检查天气或没有用户没有点登录可以说路径http://yourdomain.com/logout.php导致这个脚本以及如果用户没有登录,他以某种方式访问​​此路径没有真正发生,但如果他登录你真的不应该关心,如果SESSION变量设置,因为你要破坏它不管。

+0

你给出的代码也不起作用。当我点击后面,它仍然在前一页。 – user2870941

+0

那么你定义了header()重定向,所以它会销毁会话,并且如果你不想重定向,那么它将把你带到Login2.php,然后简单地移除header()函数。至于会议真的没有什么不能在那里工作。 –

0

调用session_destroy()使session_unset()需要重复和不必要的。在header()之后还要拨打die(),否则一切仍然执行并且重定向失败。

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

有很多冗余逻辑和代码仍然所以这里的最优解是:

logout.php

<?php 
session_start(); 
session_destroy(); 
header('Location: Login2.php'); 
die(); 
?>