如何从所有页面注销,当我点击注销链接时,我只是从一个页面尝试从另一个页面注销它不起作用。
我的控制器代码是:
public function do_login()
{
$this->user = $this->input->post('user_email',TRUE);
$this->pass = $this->input->post('user_pass',TRUE);
$this->pass=md5(sha1(sha1($this->pass)));
$u = new User();
$login_data = array('email' => $this->user, 'password' => $this->pass);
$u->where($login_data)->get();
if(!empty($u->id) && $u->id > 0 )
{
$_SESSION['user_id'] = $u->id;
$_SESSION['user_name']= $u->username;
$_SESSION['fullname']= $u->fullname;
$_SESSION['is_verefied'] = $u->active;
$_SESSION['user_email']= $u->email;
$u->lastlogin = time();
$u->save();
setcookie("logged", 1, time()+86400);
if(empty($_POST['referer']))
{
if(empty($_GET['referer']))
{
$url = "./";
}
else
{
$url = $_GET['referer'];
}
}
else
{
$url = $_POST['referer'];
}
redirect($url);
}
else
{
$this->template->set_layout('inner');
$this->template->build('login_view',$this->data);
}
}
public function logout()
{
setcookie("logged", 0, time()+86400);
$_COOKIE["logged"] = '';
$_SESSION['user_id'] = '';
$_SESSION['user_name']= '';
$_SESSION['fullname']= '';
$_SESSION['is_verefied'] = '';
$_SESSION['user_email']= '';
redirect('./home/index/logout');
}
当我从网站注销,并从浏览器中单击返回时,用户信息会话未被删除。
答案 0 :(得分:0)
浏览器的后退按钮可能会让您进入您页面的缓存版本,并在您登录时从后面缓存。另外,我建议您使用CodeIgniter's sessions。
确保你做的一切正确。
销毁会话:
$this->session->sess_destroy();
清除Cookie,确保使用与设置时相同的相同的域,并将时间设置为过去:
setcookie('logged', '', time()-3600); // minus one hour
答案 1 :(得分:0)
此脚本会将用户从已启动会话的所有页面中记录下来。您知道如果此代码位于该页面代码的顶部,则页面将使用会话:
<?php session_start(); ?>
退出网站只是清除任何会话数据然后销毁它。
在logout.php中尝试以下内容:
<?php
session_start();
// what were doing here is checking for any cookies used by the session.
//If there are any, we are going to delete the data with it.
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
//now lets unset the session and destroy it
session_unset();
session_destroy();
// for the redirect, we simple use the php header to send the redirect url to the browser
header("Location: login");
确保使用标题功能时没有输出,由空格或html引起。作为注销页面,无论如何都应该没有输出,因为导航到注销页面应该将用户注销并立即重定向。
我在我的所有网站上使用此脚本,效果很好。在我希望注销链接出现的任何地方,我只是链接到页面: 注销
只需创建一个名为logout.php的文件并将此代码放入其中。
希望这能帮到你!