当用户决定退出时,他们显然会使用“退出”按钮执行此操作 当他们这样做时,执行这个脚本:
if(isset($_POST['submit_Logout'])){
$_SESSION['backend']->logout(); // see this function bellow
unset($_SESSION['user']); // unset only this session since there are other sessions I'd like to keep
session_regenerate_id(true); // makes sure the session id is updated, and the old one is discarded
KD::notice('success',$success_LoggedOut); // adding a notice to another session
KD::redirect('/'); // redirecting the user using header();
session_commit();
}
我只是取消了这个特定的会话(user
),因为还有其他会话可以保存其他数据,无论用户是否登录,都可以改善用户体验。
logout()
- 函数看起来像这样 - 现在:
public function logout(){
$this->accessible=false; // just a flag to check against (see bellow)
$this->username=''; // empty the username
}
由于我没有设置保存相关用户数据的会话,我才意识到这个功能可能是不必要的。或者将未设置的部分等移动到函数中..
无论如何,我已经体验过,当用户退出时,他/她或其他人有机会在浏览器中点击后退按钮,瞧,他们可以查看网页。当然,如果他们开始点击任何链接,他们就会被抛弃。但是后退按钮仍然可用..
我认为这是由浏览器缓存的页面/视图引起的。因此,当他们点击后退按钮时,他们会看到存储在浏览器内存中的缓存页面/视图等等。
由于此页面或视图通过带有永久<head>
的index.php页面加载到我的模板中,因此我无法对这些受限制的页面/视图进行缓存。或者有吗?
无法从浏览器历史记录中删除记录?或阻止这些页面首先被记录?
点是。我相信,我需要做的是强制浏览器始终从服务器请求页面。因此,无论用户点击后退按钮还是指向受限页面的链接,该页面都应该始终从服务器请求它,而不是浏览器内存..
或者我没有说明这一点?
如果是这样的话。我真的好奇。这通常是怎么做的?
我在班上有这个
private $accessible = false; // when logged in, this is set to true
public function accessible(){
return $this->accessible;
}
在包含限制区域视图的页面顶部,我有这个:
if($_SESSION['user']->accessible()===true):
通过登录屏幕提示用户提示用户 但这并不像预期的那样奏效。当用户在浏览器中使用后退按钮时,不会执行此检查...
提前致谢..
更新
下面简要介绍一下我的结构/布局:
/*
when the user is logged in/out, the script that does that is executed up here.
That includes setting the sessions etc. aswell - which means, if the user is not logged in, the access will be set to false.
*/
<head>
</head>
<body>
/*
Here I include different pages with php include;
These pages can be home.pg.php, contact.pg.php, and of course restricted.pg.php
each of these pages includes different content (views as I like to call them) that is presented to the user based on their interaction.
Now. When the user tries to access the restricted.pg.php, I have this at the top:
*/
if($_SESSION['user']->accessible()===true):
/* now each view that is included here should be not accessable if accessable() is not true. */
else:
/* the user is presented with a login form */
endif;
</body>
这有帮助吗?
答案 0 :(得分:1)
需要登录的所有网页都应该有这样的内容,
session_start();
if(!isset($_SESSION['user']){
//REDIRECT USER TO LOGIN PAGE
}
如果由于浏览器缓存问题而导致您回到页面的缓存版本(即使用户已注销),那么您应该将用户重定向两次(良好做法)。
我的意思是创建一个名为logout.php的文件,这样当用户点击注销按钮时,它会将用户重定向到logout.php(该会话未设置会话代码),然后将用户重定向到登录页面。< / p>
so current page ----redirects to---> logout.php ----redirects to----> login.php
答案 1 :(得分:0)
我认为在每个页面中您都可以检查是否设置了会话。恩。 Session::handlelogin('user')
然后你可以在Session类中创建一个函数即handlelogin
Class Session {
function handlelogin($user) {
if (!isset($user)) {
//redirect the user to your login page
}
}
}
注意:如果您使用的是MVC架构,那么只需将其设置在页面顶部,然后就可以在Controller中进行设置
Session::handlelogin('user')