【问题标题】:How to logout a user in php?如何在php中注销用户?
【发布时间】:2013-07-30 18:12:24
【问题描述】:

我正在制作一个登录系统,我刚刚开始使用它,但现在我在为我的网站制作注销功能时遇到了困难。它实际上还没有托管,所以安全性将在以后出现。我已经尝试过 session_destroy 和 unset 的各种用途,但我无法让它工作。任何帮助将不胜感激。

我的 PHP

<?php
session_start();
/*This is the equivalent of login.php*/
$database = "forum";  // the name of the database.
$server = "localhost";  // server to connect to.
$db_user = "root";  // mysql username to access the database with.
$db_pass = "";  // mysql password to access the database with.
$table = "members";    // the table that this script will set up and use.
$link = mysql_connect($server, $db_user, $db_pass);
mysql_select_db($database,$link);

if (isset($_POST['fsubmitted'])) {
// Get the data passed from the form
$username = $_POST['username'];
$pass = $_POST['pass'];

// Do some basic sanitizing
$username = stripslashes($username);
$pass = stripslashes($pass);
$encryptedpass = md5($pass);

$sql = "SELECT * from members where username = '$username' and password = '$encryptedpass'";
$result = mysql_query($sql);


$count = 0;

$count = mysql_num_rows($result);

if ($count == 1) {
     $_SESSION['loggedIn'] = "true";
    header("Location: index.php"); // This is wherever you want to redirect the user to
    exit();

} else {
     $_SESSION['loggedIn'] = "false";
     echo '<div class="errormsgbox">Your username and password combo was incorrect!</div>';
     var_dump($result);
    echo $sql;
}
}

if ($_SESSION['loggedIn'] = "true") {
    echo '<div class="success">You are now logged in!</div>';
}

if (isset($_SESSION['loggedin']) && (time() - $_SESSION['loggedin'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['loggedin'] = time(); // update last activity time stamp

?>

【问题讨论】:

  • 请注意,MYSQL_* 函数已折旧。您应该使用 MYSQLI 或 PDO。
  • 安全应该一直存在而不是之后。
  • 你在哪里开始会话?
  • 第一个缺失且最重要的元素:session_start();。我会让你看看下面的答案。
  • session_start() 应该在哪里;去吗?

标签: php session logout


【解决方案1】:

用途:

session_start();

具有以下任一条件:

session_destroy();
session_unset();
unset($_SESSION["loggedin"]);
$_SESSION = array();

【讨论】:

    【解决方案2】:

    我可以在您的代码中看到两个错误:

    • 您尚未开始会话
    • 您尚未告诉代码要取消/销毁哪个会话

    开始会话:

    将此作为 PHP 代码的第一行:session_start();

    退出

    让我们仔细看看这段代码:

    if (isset($_SESSION['loggedin']) && (time() - $_SESSION['loggedin'] > 1800)) {
        // last request was more than 30 minutes ago
        session_unset();     // unset $_SESSION variable for the run-time 
        session_destroy();   // destroy session data in storage
    }
    

    你还没有告诉代码unsetdestroy是哪个会话!

    为此,您必须在括号内包含一个会话变量。

    试试这个代码:

    if (isset($_SESSION['loggedin']) && (time() - $_SESSION['loggedin'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset($_SESSION['loggedin']);     // unset $_SESSION variable for the run-time 
    session_destroy($_SESSION['loggedin']);   // destroy session data in storage
    } 
    

    我所做的只是告诉代码unsetdestroy是哪个会话

    更新
    如果这对您不太有效,请尝试此方法。

    if (isset($_SESSION['loggedin']) && (time() - $_SESSION['loggedin'] > 1800)) {
    // last request was more than 30 minutes ago
    unset($_SESSION['loggedin']);     // unset $_SESSION variable for the run-time 
    $_SESSION['loggedin'] = "false";
    } 
    

    另一个值得一看的好东西是有一个注销按钮。这在这里解释:Logout button php

    我希望这对您有所帮助,如果我能提供进一步的帮助,请告诉我!

    【讨论】:

    • 我喜欢您解释答案的方式,但是缺少一个关键要素,即使用注销方法的方式(如何)。我会给你一个线索:“链接到”(眨眼)stackoverflow.com/a/12209491/1415724
    • @Fred 和 PattyD 我查看了您提供给其他堆栈溢出注销问题的链接,并实现了它,但我的系统似乎仍然认为我应该登录。还有其他建议吗?
    • @Zippylicious “但我的系统似乎仍然认为我应该登录”。你到底是什么意思?我不明白。
    • @Fred $_Session['loggedin'] 变量仍然重复为真,这决定了网站是否提供登录内容。应该是假的。
    【解决方案3】:

    在您注销某人的脚本中,只需:

    session_start();
    unset($_SESSION);
    session_destroy();
    

    您还应该在上面显示的 login.php 中的某个位置调用session_start()

    【讨论】:

    • 不是“应该”,而是 “必须” ;-) 您还应该说明 session_start(); 的位置,以及在哪些文件中(眨眼)
    • @bizzehdee 我将该代码放入 logout.php 文件并在添加会话开始后运行它,但我的网站似乎仍然认为 $_SESSION['loggedin'] = 'true';,并不是说它是假的。
    【解决方案4】:

    我会尝试使用这个功能:

    function logout(){
        if(session_id() == '') { // start session if none found
            session_start();
        }
    
        session_unset();         
        session_destroy();
        unset($_SESSION['loggedIn']);
    }
    

    使用这个函数你需要做的就是调用 logout();您希望该人在哪里注销。

    【讨论】:

    • 我认为 OP 可能没有您在 PHP 和会话方面的经验。我建议你解释一下如何使用这个方法。
    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 2022-12-14
    • 2010-10-27
    • 2014-10-04
    • 1970-01-01
    • 2010-11-26
    • 2017-10-06
    相关资源
    最近更新 更多