【发布时间】:2014-10-08 23:46:04
【问题描述】:
我有一个这样的会话设置:
<?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');
}
?>
【问题讨论】:
-
如果您返回到它进入数据库的页面并授权您(假设 POST 已重新发送),则 IF 将为 TRUE,并再次设置会话。
-
谢谢詹姆斯,但我没明白你的意思?
-
关于您的登录流程,您的问题并不完全清楚,我的意思是:您将表单数据发布到上面的脚本,您以正确的凭据登录,会话已设置,您现在进入下一页在,您单击注销,您已注销,您单击返回,POST 数据仍然设置并检查数据库中的数据再次返回 TRUE(如 POST 数据之前所做的那样),您的会话再次创建。 - 如果在 logout.php 文件的末尾你回显你的会话(并在回显后使用
exit()),你会得到什么?还设置吗? -
谢谢詹姆斯,我明白了,这正是我的问题,但我该如何解决呢?
-
en.wikipedia.org/wiki/Post/Redirect/Get - Stack 在 Post/Redirect/Get 上有一些很好的答案