0

如何从所有视图页面注销,当我单击注销链接时,当我试图从另一个页面注销时,我只从一个页面中注销它不起作用。

我的控制器代码是:

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');
}

当我从站点注销并从浏览器中单击返回时,用户信息会话不会被删除。

4

2 回答 2

0

浏览器的后退按钮可能会让您进入页面的缓存版本,在您登录时从后面缓存。另外,我建议你使用CodeIgniter 的 sessions

确保你做的一切都是正确的。

销毁会话:

$this->session->sess_destroy();

清除 cookie,确保使用与设置时相同的域,并且时间设置为过去:

setcookie('logged', '', time()-3600); // minus one hour
于 2013-08-18T06:00:54.293 回答
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");

确保在使用 header 函数时没有输出,由空格或 html 引起。作为注销页面,无论如何都应该没有输出,因为导航到注销页面应该将用户注销并立即重定向。

我在我所有的网站上都使用了这个脚本,效果很好。我希望在任何地方出现注销链接,我只是链接到该页面:注销

只需创建一个名为 logout.php 的文件并将此代码放入其中。

希望这对你有帮助!

于 2016-03-15T01:50:47.060 回答