没有在php5的所有页面中设置会话

时间:2011-08-18 14:29:42

标签: php

我正在使用session_start();在我的登录页面的顶部。用户登录后,屏幕上会显示一条消息,表明正在设置会话。但是,我不能在页面之间传送会话,或者我可以回应SID。这是一个空白值。如果有人能告诉我出错的地方,我将不胜感激。感谢

<?php

  $userpost = mysql_real_escape_string($_POST['user']);

  if (!isset($_SESSION['user'])) {
   session_start();
   $_SESSION['user'] = $userpost;
}

   echo $_SESSION['user'] .' '. 'Just logged in' .  SID;
   // Or maybe pass along the session id, if needed

?>

3 个答案:

答案 0 :(得分:4)

session_start();之后,您必须在代码的最顶部放置<?php。由于您正在检查是否在未启动会话的情况下设置了会话,因此您的代码将失败。

必须是这样的:

<?php
 session_start();
 $userpost = mysql_real_escape_string($_POST['user']);

 if (!isset($_SESSION['user'])) {
   $_SESSION['user'] = $userpost;
 }

 echo $_SESSION['user'] .' '. 'Just logged in' .  SID;
 // Or maybe pass along the session id, if needed

?>

答案 1 :(得分:1)

这是因为您总是在$_POST查找您的用户数据。

session_start()带出该条件:

<?php
  session_start();
  $userpost = mysql_real_escape_string($_POST['user']);

  if (!isset($_SESSION['user'])) {
   $_SESSION['user'] = $userpost;
  }

答案 2 :(得分:1)

你说你在登录页面的顶部打了session_start(),但是你没有提到你的其他页面。需要在应用程序的每个页面顶部调用session_start()。我通常将我的session_start()逻辑以及用于在一段时间不活动后将用户注销的代码片段放在包含文件中,然后将其包含在每个页面的顶部。

<?  session_start();

    if (isset($_SESSION["last_activity"]) && (isset($_SESSION["username"])) && ((time() - $_SESSION["last_activity"]) > 900))
    {
        unset($_SESSION["username"]);
    }
    else
    {
        $_SESSION["last_activity"] = time();
    }
?>