2011-07-11 127 views
2

我有一个受保护的页面,它只显示登录用户的数据,一旦用户单击注销链接,它会销毁会话数据并重定向到另一个页面。PHP防止在注销后返回页面

现在,一旦页面被重定向到login.php,我可以轻松地转到受保护的后台页面,并且可以看到所有信息并保留在页面上,直到我刷新浏览器或关闭它。

在诸如Gmail等网站上,一旦您登录,就无法返回页面。这可以如何实施? 谢谢。

编辑:对不起,如果它不清楚,受保护的页面在顶部有几行代码检查会话是否设置。如果会话没有设置,那么它应该重定向到其他页面。但问题是,如果我点击浏览器上的后退按钮,它不检查会话。

回答

4

此行为可能是由您的浏览器/ Web服务器的默认缓存设置引起的。

每当用户访问受保护的页面,尝试发送插座,以避免页面缓存:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 

这通常应该引起任何后退按钮按下引起页面,而不是加载一个完整的重新加载它来自浏览器的缓存。

2

把这个在受保护的页面的顶部:

//Probably caused by back button... Check if logged-in... 
if(!$_SESSION["usernameWhatever"]) 
{ 
    //Do not show protected data, redirect to login... 
    header('Location: login.php'); 
} 

//Show protected data... 

这基本上检查,如果用户登录,如果没有,重定向到登录页面...

要禁用的缓存页面,把这个网页的head标签中:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
+0

我的这些线,但是在浏览器不似乎检查后退按钮被击中。 – Roman

+0

@罗曼 - 这可能是由浏览器的缓存引起的。你可以用'meta'标签来控制它。或者在php上Jani的'header'我觉得更漂亮了。 – dpp

0

此代码解决问题

<?php 
    echo("<script>location.href = './login.php';</script>"); 
?> 
相关问题