0

次のような Web アプリのログアウト スクリプトがあります。

<?php
session_start();
require_once("config.php");
$logout_connect = mysql_connect($db_host, $db_user, $db_pass);
    if (!$logout_connect){
        die('Impossibile connettersi: ' . mysql_error());
    }else{
        mysql_select_db($db_name, $logout_connect);
        mysql_query("DELETE FROM valutazioni_recenti WHERE idutente = '".$_SESSION['userid']."' ");
        if(mysql_query("DELETE FROM sessions WHERE ssnid = '".$_SESSION['ssnid']."' AND userid = '".$_SESSION['userid']."'")){
            $_SESSION = array();
            $session_id = session_id();
            session_destroy();
            mysql_close($logout_connect);
            header("location: login.php?logout");
            exit();
        }

    }

?>

ユーザーを正しくログアウトさせますが、ログイン時にDBにセッションデータを保存し、ログアウト時に削除するため、ログアウトして再度ログインすると、「096c02aefbb34jd175bfa89d4ec1235」のようなセッションIDでログインすると、その特定のユーザーに同じセッション ID を割り当てます。それは正常ですか?それを変更する方法はありますか?ログイン時間と混ぜる(またはm5dする)必要がありますか??

4

2 に答える 2

1

これは完全に正常です。心配する必要はありません。他の人が StackOverflow で同じことについて尋ねました。

これはブラウザに Cookie が保存されているためです。「修正」するには、Cookie を削除するか、PHP で ID を再生成する必要があります。

別の投稿でより良い説明があります:

テスト環境(WAMP)でPHPが毎回同じセッションIDを生成するのはなぜですか?

于 2013-03-23T11:25:25.440 に答える
1

ユーザーの browser に保存されている Cookie 値であるログアウトコードに何かが欠けています。PHP 関数 session_destroy(); はユーザーの Cookie を削除しません。有効期限を日付または時刻に戻すことにより、手動で設定を解除する必要があります。

setcookie ("TestCookie", "", time() - 3600);  //will set expiry time one hour back

したがって、ユーザーのブラウザの Cookie を設定解除しないと、新しいログインを行うたびに同じセッション ID が使用されます。

于 2013-03-23T11:36:05.357 に答える