1

この問題があるか、それがどのように機能するかの概念がわかりません。記憶機能を使用してログインしました。ユーザーがチェックした場合は Cookie に保存するので、Web ページを再度入力すると、メイン ページに直接アクセスでき、再度ログインすることはできません。ユーザーが rembmber の Cookie を持っていて、サイトにログインせずに直接入力するとどうなりますか? そのセッション情報を失いました..どうすればいいですか??

私はあなたがコメントを理解していないことを願っています.

4

1 に答える 1

0

セッションに保存している情報は、ユーザーに関連するデータであり、ユーザーはどこかのデータベースから取り出されていると思いますか?その場合、私がお勧めする解決策は次のとおりです。

ユーザーが[RememberMe]オプションを選択したときに設定するCookieには、データベースで同じユーザーを再度検索できる値が含まれている必要があります。これにより、そのユーザーを見つけた場合と同じようにセッションをインスタンス化できます。ログイン時に提供された資格情報を介して。これを簡単な方法で実行し、ユーザー情報の一意のデータベースIDを保存するのは魅力的ですが、そうしないでください。

代わりに、user_id、session_id、expire_timeの3つの列を含むsessionsというテーブルを作成します。「RememberMe」ビットをtrueに設定してユーザーがログインすると、ユーザーID、セッションID(session_id()関数を呼び出すことで取得可能)、および必要な時間を保存します。期限切れになる「記憶された」セッション。

ユーザーがログインしてデータをセッションに追加すると、次のような関数を呼び出すことができます。

<?php
   function persist_session(){
     $user_id     = $_SESSION['user']->id;
     $session_id  = session_id();
     $expire_time = time() + (60 * 60) * 24; // 24 hours
     $sql         = "INSERT INTO sessions (user_id, session_id, expire_time), VALUES ($user_id, $session_id, $expire_time)";
     mysqli_query($sql); // This assuming you've already set up your DB connection and so on
     $_COOKIE['session_id'] = $session_id; // Write the persisted session ID to a cookie
   }
?>

これはひどく完全な例ではありません。1つには、一度に複数のセッションがテーブルに永続化されないようにするためのコードを記述したい場合がありますが、それは十分に簡単です...

セッション情報を永続化し、後で参照できるようにCookieに書き込んだら、Cookieからユーザー情報を取得するのは非常に簡単です。

<?php
    function reinstantiate_session(){
      if(isset($_COOKIE['session_id')){
        $session_info = mysqli_fetch_object(mysqli_query("SELECT * FROM sessions WHERE session_id = '{$_COOKIE[session_id]}'")); 
        if($session_info){
          $_SESSION['user_id'] = $session_info->user_id;
        }
      }
    }
?>

繰り返しになりますが、この例は可能な限り完全ではありません...エラーを処理する必要があります。特に、期限切れの情報を除外するためにfind sqlを更新する必要がありますが、これで十分です。始めました!

于 2013-02-27T22:29:35.720 に答える