完全从网站注销用户

时间:2013-05-05 09:23:20

标签: php session

我有一个PHP login和注销脚本,我想要实现的是当用户点击注销链接时他完全注销,无论点击浏览器的后退按钮,还是不希望用户访问该页面。应将其重定向到login页面

这是登录功能

function loggedin() {
    if ( isset($_SESSION['user_id']) && !empty($_SESSION['user_id']) ) {
        return true;
    } else{
        return false;
    }
}

这是我的退出脚本

<?php
include 'includes/connect.php';
include 'includes/functions.php';

session_destroy();
header('location: index.php');

?>

我怎样才能实现这个目标?

4 个答案:

答案 0 :(得分:2)

您可以删除所有Cookie

if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

http://www.php.net/manual/en/function.setcookie.php#73484

如果你有一组用于登录验证的cookie名称,你应该只用它们迭代循环。

答案 1 :(得分:2)

问题是完全从网站注销用户,而不仅仅是如何销毁PHP会话,所以我的答案会更复杂一些。

由于您使用PHP的$_SESSION功能来处理用户会话,因此您可以特别将当前会话ID绑定到用户帐户。然后,您可以轻松强制会话过期。

例如,在用户数据库中创建一个新字段,并将其命名为active_session_id或其他内容。每次用户登录时,都会将session_id()输出保存到其中。然后在loggedin()函数内部检查当前请求的session_id()是否与用户登录时保存的那个匹配,如果不匹配,则该函数将返回false,因此这是如何你实际上结束了用户会话。即即使它仍然存在,它将不再有效。

值得注意的是,上述解决方案将是一种one-to-one关系,即一个用户只能有一个活动会话。如果您希望允许用户同时来自不同的地方,则必须通过创建一个名为“例如”的新表来保持one-to-many关系。 users_sessions并在那里保存会话ID。请不要在当前用户表格中创建其他字段,例如active_session_id_1active_session_id_2等,因为这不是一个好习惯。

希望这有帮助

答案 2 :(得分:1)

您可以编写一个通用函数来检查用户是否已登录,如果不是仅仅重定向它们

function isLoggedIn(){

    if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])){

        //do what you want

    } else{
        header("location:youloginpage.php");

    }
}

答案 3 :(得分:1)

如果您未在问题上指定更多内容,我们只能按假设进行处理。无论如何,由于您正在使用该SESSION,并且不清楚是否要销毁所包含的数据,检查用户是否已登录的功能可以通过以下方式进行修改:

function loggedin() {
    if ( isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']) && ($_SESSION['user_id'] > 0) ) {
        return true; //user is logged in
        //other operations to be performed
    } else{
        return false; //user is NOT logged in
        //other operations to be performed
    }
}

注销功能可能是这样的:

function logout() {
    if ( isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']) && ($_SESSION['user_id'] > 0) ) {
        $_SESSION['user_id'] = -1; //"unsets" the user, while not destroyng session
    } else{
        return false; //user is already logged out - do nothing
    }
}