【问题标题】:how to logout and cannot properly logout with php?如何注销并且无法使用 php 正确注销?
【发布时间】:2018-01-14 23:01:57
【问题描述】:

这里是用户登录的地方。当我在“记住我”未激活的情况下登录时,我似乎无法注销...

while($user = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $passwordDB = $user['mypassword'];
        $email = $user['email_address'];
        $userid = $user['user_id'];
    }

 if ($remember_me == "true"){ // Create a Cookie if remember_me is active
      $expire = time()+60*60*24; // Valid for only 1 day
      setcookie("cookie_username", $username, $expire, "/");
      setcookie("cookie_email", $email, $expire, "/");
      setcookie("cookie_userid", $userid, $expire, "/");

     } else if ($remember_me == "false") { // Only create a session if remember_me is not active
                session_start(); // cannot logout if i put it here
                $_SESSION['session_userid'] = $userid;
                $_SESSION['session_username'] = $username;
                $_SESSION['session_email'] = $email;

            } 

我的 php 注销代码

<?php

require_once 'mydatabase.php';

 $_SESSION = array();

 if (ini_get("session.use_cookies")) {

 $params = session_get_cookie_params();
 setcookie(session_name(), '', time() - 86400,
    $params["path"], $params["domain"],
    $params["secure"], $params["httponly"]
  );

 }

 ?>

选中“记住我”时,我可以正确注销。 问题解决:我不小心删除了注销顶部的session_start(),然后忘记将其放回。

【问题讨论】:

  • 你能把代码贴在你检查用户是否登录的地方吗?我假设您需要重置所有字段的 cookie 值。使用浏览器的 Web 开发人员工具查看设置了哪些值

标签: php session-cookies logout


【解决方案1】:

要关闭所有会话变量,您可以尝试类似的方法

if( isset( $_SESSION ) ){

    $vars=array(
        'session_userid',
        'session_username',
        'session_email'
    );

    foreach( $vars as $var ){
        @unset( $_SESSION[ $var ] );
    }

    @session_unset();
    @session_destroy();
    @session_start();
    @session_regenerate_id( true );
}

【讨论】:

    【解决方案2】:

    在不知道如何检查用户是否登录的情况下,假设您还需要在注销代码中使用session_start();

    使用developer tools 查看浏览器当前保存的数据。

    【讨论】:

    • 我相信我发现了我的错误...等一下。愚蠢的错误,我相信我在注销 php 开始时不小心删除了我的session start(),提醒一下。它现在可以工作了
    • 那么请随意接受我的回答。下次贴上所有代码,因为很少有人有魔法水晶球才能看到丢失的碎片;)
    【解决方案3】:

    我会像这样使用 session_start 和 session_destroy():

    <?php
    session_start();
    session_destroy();
    
    require_once 'mydatabase.php';
    
     if (ini_get("session.use_cookies")) {
    
     $params = session_get_cookie_params();
     setcookie(session_name(), '', time() - 86400,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
      );
    
     }
    

    【讨论】:

    • 可能先删除会话cookie,再销毁会话?
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2013-01-24
    相关资源
    最近更新 更多