2014-10-08 73 views
0

结束会议我有一个会话建立这样的:问题 - 关于注销

<?php 
session_start(); 
include 'conconfig.php'; 
$con = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME); 

$email = $_POST['email']; 
$pass = $_POST['pass']; 

$query = "SELECT * FROM tempusers WHERE user='$email' AND pass='$pass'"; 
$result = mysqli_query($con,$query)or die(mysqli_error()); 
$num_row = mysqli_num_rows($result); 
$row=mysqli_fetch_assoc($result); 
if($num_row >=1) { 
    echo 'true'; 
    $_SESSION['uName'] = $row['uName']; 
    } 
else{ 
    echo 'false'; 
} 
?> 

,在我logout.php我有

<?php 
    session_start(); 
    session_unset(); 
    unset($_SESSION['uName']); 
    session_destroy(); 
    header("Location:index.php"); 
?> 

但没有的session_unset();unset()session_destroy();似乎不工作,因为进入页面后,我仍然可以使用浏览器“后退”按钮并返回到受限制的页面!除了header()不会将页面更改为index.php您能否让我知道我在做什么错误以及如何修复它?

基本上,我在受限页面注销链接是这样

<a href="logout.php" >Logout</a> 

感谢

更新: 这里是会议的代码,我在

受限页面顶部
<?php 
session_start(); 
    if(empty($_SESSION['uName'])){ 
    header('Location: login.php'); 
} 
?> 
+1

如果你回到它进入数据库并授权你的页面(假定POST被重新发送),那么IF将为TRUE,并且会话再次设置。 – James 2014-10-08 23:52:58

+0

谢谢詹姆斯,但我没有明确你的意思? – Suffii 2014-10-08 23:56:39

+0

您的问题并不完全清楚您的登录流程,我的意思是:您将POST表单数据写入上面的脚本,您以凭据正确登录,会话已设置,现在登录到下一页,单击注销,您已经注销,您点击后,POST数据仍然被设置,并且检查数据库中的数据再次返回TRUE(如POST数据之前所做的那样),您的会话将再次创建。 - 如果在logout.php文件结尾回显你的会话(并在echo之后使用'exit()'),你会得到什么?它仍然设置? – James 2014-10-09 00:01:12

回答

0

尝试重新生成会话ID并销毁所有数据。

<?php 
    session_start(); 
    session_unset(); 
    session_destroy(); 
    session_write_close(); 
    setcookie(session_name(), '', 0, '/'); 
    session_regenerate_id(true); 
    header("Location:index.php"); 
    exit(); 
?> 
+0

嗨slapyo,谢谢你的回复,但我仍然得到相同的结果 – Suffii 2014-10-08 23:55:26

+0

重定向工作?在打开PHP标记或session_start()函数之前没有空白区域? – slapyo 2014-10-09 04:05:42

+0

不,我只是复制你给的所有东西,但都一样! – Suffii 2014-10-09 06:44:07