0

これがこれを行っている理由はわかりません。しかし、私のlogout.phpコードは正常に機能し、ホームページにリダイレクトされ、セッションが破棄されます。特定のページに戻ると、古いセッションが表示されますが、取得できません。

これが私のログインファイルです

   $_SESSION['id'] = $row['user_id'];
   $_SESSION['username'] = $row['username'];
   setcookie('id', $row['user_id'], time() + (60 * 60 * 24 * 2));
   setcookie('username', $row['username'], time() +(60 * 60 * 24 * 2));

これが私のログアウトファイルです

   // if the user is logged in, delete the cookie to log them out
   session_start();
   if (isset($_SESSION['id'])) {
     $_SESSION = array();

     // delete the user id and the username cookie by setting their expirations to an hour ago (3600)
   if (isset($_COOKIE[session_name()])) {  
      setcookie('session_name()', '', time() - 3600);

   }
   //destroy the session
session_unset();
    session_destroy();
  }

   //delete the user id and username cookies
   setcookie('id', '', time() - 3600);
   setcookie('username', '', time() - 3600);
 unset($_COOKIE['id']);
 unset($_COOKIE['username']);
     unset($_SESSION['id']);
     unset($_SESSION['username']);
   // redirect to the home page
   $home_url = 'http://page.com/';
   header('Location: ' . $home_url);
   exit();

これが私のページにあるコードです:

session_start();

// If the session vars aren't set, try to set them with a cookie
if (!isset($_SESSION['id'])) {
  if (isset($_COOKIE['id']) && isset($_COOKIE['username'])) {
    $_SESSION['id'] = $_COOKIE['id'];
    $_SESSION['username'] = $_COOKIE['username'];
  }
} 

このコードはホームページでは正常に機能しますが、サブディレクトリに入ると、ランダムに古いセッションが表示されます。

4

1 に答える 1

1

セッションを単に破棄するのではなく、破棄する前に最初に設定を解除してみましたか?

unset($_SESSION['id']);
unset($_SESSION['username']);

次に、session_destroy()関数を呼び出します。

また、SQLの直接の結果($ row ['id'])をCookieに保存するのは得策ではないことをどこかで読んだことがあります(残念ながら、どこにあるのか思い出せません。結果を最初に$_SESSIONに保存してから、その$_SESSIONをCookieに保存するのがおそらく最善です。

于 2013-03-21T02:53:56.800 に答える