我正在尝试在我的代码中使用会话进行登录和注销,但是我的浏览器会保存正在传递的数据,如果我输入这样的“localhost / P_Display / user / Dashboard /”网址,我可以直接访问该页面我甚至可以在注销后直接访问此页面,这意味着会话没有被彻底销毁? 这是我的代码
public function logout()
{
$this->session->unset_userdata('user_id');
$this->session->sess_destroy();
return redirect('user','refresh');
}
这是检查用户登录的部分..
现在注销
render()
如何阻止用户在注销后访问任何内容?
答案 0 :(得分:0)
在视图文件中尝试此操作
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
或者.htaccess FileETag无 标题未设置ETag 标题集Cache-Control&#34; max-age = 0,no-cache,no-store,must-revalidate&#34; 标题设置Pragma&#34; no-cache&#34; Header set Expires&#34; Wed,11 Jan 1984 05:00:00 GMT&#34;
或者 在控制器的__construct函数中
$this->output->set_header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
$this->output->set_header('Pragma: no-cache');
$this->output->set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
或HTML格式
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
了解更多 访问 How to control web page caching, across all browsers?
答案 1 :(得分:0)
我认为您可以在仪表板控制器的构造函数中检查会话。 如果未设置会话,则将用户重定向到登录页面,如...
class Dashboard extends CI_Controller {
public function __construct()
{
if(!isset($this->session->userdata['user_id']))
{
redirect('user','refresh');
}
}
.....
}
如果用户未登录,这将重定向到用户(应该是登录)控制器。
答案 2 :(得分:0)
当我对登录部分和控制访问进行编码时,我用来控制每个函数的userdata会话。这意味着每个函数都以如下内容开头:
{{1}}
例如。
我没有设法在构造函数或其他中使用它。
答案 3 :(得分:0)
将以下代码放在所有需要登录的控制器的__construct函数中
$this->output->set_header('Last-Modified:' . gmdate('D, d M Y H:i:s') . 'GMT');
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
$this->output->set_header('Cache-Control: post-check=0, pre-check=0', false);
$this->output->set_header('Pragma: no-cache');
单击浏览器的后退按钮后,此页面将无法打开。