如何从网站注销?

时间:2013-08-18 05:52:02

标签: codeigniter

如何从所有页面注销,当我点击注销链接时,我只是从一个页面尝试从另一个页面注销它不起作用。

我的控制器代码是:

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

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

2 个答案:

答案 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的文件并将此代码放入其中。

希望这能帮到你!