PHP:注销用户

Posted

技术标签:

【中文标题】PHP:注销用户【英文标题】:PHP: log a user out 【发布时间】:2014-11-16 03:24:57 【问题描述】:

我有一个允许用户输入数据的表单。然后它根据数据库检查这些数据以查看用户是否存在。如果是这样,它会将它们记录到某个页面中。

然后我想允许他们注销(这样他们就无法再访问该特定页面)。为此,我创建了一个“logout.php”文档,在其中尝试清除登录详细信息。

但是,完成此操作后,如果我尝试加载登录页面,它会将我带回登录页面。

这是我的代码(login.php - 创建表单并登录用户):

<?php  //Start the Session
session_start();

require('connect.php');
if (isset($_POST['username']) and isset($_POST['password']))

    //3.1.1 Assigning posted values to variables.
    $username = $_POST['username'];
    $password = $_POST['password'];

    //3.1.2 Checking if the values exist in the database
    $checkLogin = $connection->query("SELECT * FROM users 
        where (username='$username' && password='$password')");
    $numRows = $checkLogin->fetchColumn();
    //3.1.2 If the posted values are equal to the database values, then session will be created for the user.
    if ($numRows >= 1)
        $_SESSION['username'] = $username;
    else
        //3.1.3 If the login credentials doesn't match, he will be shown with an error message.
        echo '<script>window.alert("Invalid Login Credentials")</script>';
    

//3.1.4 if the user is logged in Greets the user with message
if (isset($_SESSION['username']))
$username = $_SESSION['username'];
echo "Hi " . $username . "
";
echo "This is the Members Area";
echo "<a href='logout.php'>Logout</a>";
echo $username;

else
//3.2 When the user visits the page first time, simple login form will be displayed.
?>
<!DOCTYPE html>
 <head>
<title>CodingCyber - Simple Login Script</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<!-- Form for logging in the users -->

<div class="register-form">
<?php
    if(isset($msg) & !empty($msg))
        echo $msg;
    
 ?>
<h1>Login</h1>
<form action="login.php" method="POST">
    <p><label>User Name : </label>
    <input id="username" type="text" name="username" placeholder="username" /></p>

     <p><label>Password&nbsp;&nbsp; : </label>
     <input id="password" type="password" name="password" placeholder="password" /></p>

    <a class="btn" href="register.php">Signup</a>
    <input class="btn register" type="submit" name="submit" value="Login" />
    </form>
</div>
<?php  ?>
</body>
</html>

"require('connect.php')";只是连接到我的 mysql 数据库。这段代码似乎运行良好,因为它确实登录用户,一旦验证。为了完整起见,我刚刚将其包括在内。问题。

如您所见,登录后会显示“会员区”文字,并带有注销超链接。

这是我的 logout.php 代码(我想删除对会员区域的访问权限,并将用户带回登录页面):

<?php
    session_start();
    $username = '';
    $password = '';
    $confirmPassword = '';
    $email = '';
    echo $username;
    unset($_POST['username']);
    unset($password);

?>

说实话,这第二段代码是我真的不知道我要做什么来删除访问权限。

我查看了其他一些问题,但似乎找不到解决方案。

任何帮助都会很棒!如果有类似的帖子或者您需要更多信息,请告诉我。

谢谢!

【问题讨论】:

【参考方案1】:

试试这个:

unset($_SESSION['username']);

它将从会话中删除用户名变量

【讨论】:

【参考方案2】:

你需要销毁会话变量:

    // Unset all of the session variables.
    $_SESSION = array();

    // If it's desired to kill the session, also delete the session cookie.
    // Note: This will destroy the session, and not just the session data!
    if (ini_get("session.use_cookies")) 
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    
    // Finally, destroy the session.
    session_destroy();
    $url = 'http://example.com';
    header( "Location: $url" );
    exit();

【讨论】:

以上是关于PHP:注销用户的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 注销非活动用户

PHP:注销用户

如何在php中检测用户是不是已注销?

强制用户注销会话 PHP

php和mysql中的登录,注销和持续时间?

如果不活动10分钟,我如何使用php上的会话注销用户[重复]