会话空后退按钮浏览器缓存

时间:2014-07-25 14:54:33

标签: php session browser-cache

我知道这是一个常见的问题,但似乎无法使其发挥作用。

用户登录并添加会话和变量。

然后用户注销并运行php脚本并破坏会话。

我在注销后打印出index.php页面上的会话,它是空的。

但是如果用户按下???

,用户仍然可以看到登录页面

我使用以下代码销毁会话:

session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
unset($_SESSION["username"]); 
header("Location: index.php");

使用它来测试会话是否已在index.php页面上销毁:

print_r("session".$_SESSION);

每个页面都有此代码以防止缓存:

 header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
 header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
 header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
 header ("Pragma: no-cache");

 <meta http-equiv="expires" content="WED, 01 JUL 2009 05:00:00 GMT" />
 <meta http-equiv="cache-control" content="no-cache" />
 <meta http-equiv="pragma" content="no-cache" />

我可以成功阻止用户输入网址地址并使用以下代码访问安全页面:

if(!isset($_SESSION['user']))
{ 
echo 'no session in here';

session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
$_SESSION['username'] = '';
header("Location: index.php");
die("Redirecting to: index.php"); 
} 

1 个答案:

答案 0 :(得分:0)

会话必须从第一行脚本开始

<?php session_start();

if(!isset($_SESSION['user']))
{ 
echo 'no session in here';

session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
$_SESSION['username'] = '';
header("Location: index.php");
die("Redirecting to: index.php"); 
}