页面在session_destroy之后带回旧会话

时间:2013-03-21 02:38:54

标签: php session-cookies

不知道为什么会这样做。但我的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'];
  }
} 

此代码在主页上运行正常,但是当我进入子目录时,它会调出一个随机的旧会话。

1 个答案:

答案 0 :(得分:1)

在破坏会话之前,你是否先尝试取消它们,而不仅仅是破坏它们?

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

然后调用session_destroy()函数。

另外,我也读到某处(不记得在哪里,不幸的是 - 可能是这样,甚至......)将直接SQL结果($ row ['id'])存储在一个不是一个好主意曲奇饼。最好先将结果存储在$ _SESSION中,然后将$ _SESSION存储在cookie中。