2011-08-18 67 views
0

我正在使用session_start();在我的登录页面的顶部。用户登录后,屏幕上会显示一条消息,表明正在设置会话。但是,我无法在页面之间进行会话,或者我可以回显SID。这是一个空白值。如果有人能告诉我我错在哪里,我将不胜感激。由于会话未在php5的所有页面上设置

<?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

你说你已经登录到登录页面顶部的session_start(),你会在你使用$ _SESSION的每个页面上都需要它。 – simnom

回答

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 

?> 
+0

Devator,它仍然没有显示SID。我需要做其他事吗? – bollo

+0

@bollo如果你想显示会话ID,那么1)你必须'定义'SID,或使用'echo session_id();'。 – Devator

+0

好的。非常感谢 – bollo

1

这是因为你总是在$_POST为用户的数据看。

带上session_start()出该条件的:

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

    if (!isset($_SESSION['user'])) { 
    $_SESSION['user'] = $userpost; 
    } 
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(); 
    } 
?> 
+0

威廉什么是last_activity? – bollo

+0

@bollo,对于您的问题和我的回复之间的长度感到抱歉。如果你从未想过它,last_activity只是一个会话变量,我创建该会话变量来跟踪会话中上次加载页面的时间。每次页面加载时我都会检查它,如果用户在一段时间内没有加载页面(本例中为900秒),我将它们注销并使其重新登录,作为一点安全性。 – William