3

セッションを破棄してログアウトし、別のセッションを開始すると、開始した最初のセッション情報が常に表示されます $_SESSION['username'];

ここで言いたいのは: このユーザー名で初めてログインしたときにセッションを開始しました --> AAAAAA そして、このコードを含むファイル logout.php を使用してセッションを破棄しました:

session_start();
session_destroy();
header("location: login.php");

別のユーザー名でログイン ---> BBBBBB すると、最初にログインしたユーザー名が常に表示されます ---> AAAAAA

ここで問題はどこにありますか

これがコードです(login.php)

<?php
        session_start();
        require_once "config/db.php";
        if(isset($_POST['login'])){     
        $username       = trim(mysql_real_escape_string($_POST['username']));
        $password       = trim(mysql_real_escape_string(md5($_POST['password']))); 
        $query          = mysql_query("SELECT * FROM `users` WHERE username='$username' AND password='$password' ")  or die(mysql_error());
         $rows           = mysql_num_rows($query);

        if($rows == 1){

            while($info = mysql_fetch_object($query)){            
                $dbusername = $info->username;
                $dbpassword = $info->password;
            }

            if($dbusername == $username && $dbpassword == $password){                   
                header("Location: index.php");         
                $_SESSION['username'] = $username;  
            }       

        }else{

        }
    }
?>

index.php :

  <?php session_start();?>
  <h3><?php echo $_SESSION['username']; ?></h3>
4

3 に答える 3

6

ドキュメントから:

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション ID も設定解除する必要があります。Cookie を使用してセッション ID を伝達する場合 (デフォルトの動作)、セッション Cookie を削除する必要があります。そのために setcookie() を使用できます。

session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
于 2013-05-26T13:48:41.553 に答える
1

@Valery Viktorovskyに同意しますが、セッションを破棄した後PHP 7は使用できないためsession_regenerate_id(true);...

変更ログHEREは次のように述べています。

7.0.0 - session_regenerate_id() saves old session data before closing.

これは PHP 7 以降で動作します。

ob_start();
session_start();
session_unset();
session_regenerate_id(true);
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
header('LOCATION: index.php');

したくない場合はこれを試すことができます

于 2017-04-02T11:42:01.343 に答える