2009-10-26 69 views
-1

我在用户登录时使用SESSIONS存储数据库中的数据。但是,当我在另一个页面上查询数据库时,SESSION变量没有为我们分配新值。

有谁知道这个问题可能是什么?

,节省变量的登录页面:

enter code here 
    session_start(); 

    if($_POST['login_button']) { 

    require_once('includes/config.inc.php'); 

    $username = $_POST['login_username']; 
    $password = $_POST['login_password']; 

    $hash_pwd = sha1($password); 

    if(($username != NULL) && ($password != NULL)) { 

    $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error()); 
mysql_select_db('main') or die(mysql_error()); 

    $check_users = "SELECT * ". 
      "FROM users ". 
      "WHERE email = '{$username}' AND password = '{$hash_pwd}'   ". 
      "LIMIT 1"; 

    $result = mysql_query($check_users); 
    $counted = mysql_num_rows($result); 

    if($counted != 1) { 

    header("location:login.php?fail"); } else { 

    while ($row = mysql_fetch_array($result)) { 

$useR_login_un = $row['name']; 
$useR_login_user_id = $row['user_id']; 
$useR_login_login_time = $row['login_times']; 
$useR_login_user_email = $row['email']; 
$useR_login_course = $row['course']; 
$useR_login_campus = $row['campus']; 

$useR_login_login_time = $useR_login_login_time + 1; 

$useR_login_datenow = date("Y-m-d") . " " . date("H:i:s"); 

$useR_login_sid = sha1($useR_login_user_id) . rand() . md5($pinch_o_salt); 

$update_login_times = "UPDATE users ". 
         "SET login_times = '{$useR_login_login_time}', last_login = '{$useR_login_datenow}' ". 
         "WHERE email = '{$useR_login_user_email}' AND user_id = '{$useR_login_user_id}'"; 

mysql_query($update_login_times); 


mysql_close($conn); 

$_SESSION['sid'] = sha1($useR_login_user_id) . $pinch_o_salt; 
$_SESSION['user_id'] = $useR_login_user_id; 
$_SESSION['username'] = $useR_login_user_email; 
$_SESSION['name'] = $useR_login_un; 
$_SESSION['course'] = $useR_login_course; 

if($useR_login_login_time == 0) { 
session_write_close(); 
header("Location: first_run.php"); 
exit; 
} 
else { 
session_write_close(); 
header("Location: home.php"); 
exit; 
} 
    } 

    } 

    } else { header("Location: login.php?fail"); exit; } } 

编辑:它存储变量,当我去到另一个页面,则出现变数,但是当我刷新,有的则是失去了他们中的一些保持不变,还有一些更改来自数据库中另一个用户的信息。

编辑2:我意识到,这只发生在我再次查询数据库时。

这是造成问题的关键是(ON home.php):

$conn = mysql_connect('localhost', 'ggordan_admin', 'valeg0r') or die(mysql_error()); 
mysql_select_db('ggordan_wmin') or die(mysql_error()); 

$query = "SELECT * ". 
      "FROM users ". 
      "WHERE course = '".$_SESSION['course']."' ". 
      "LIMIT 3"; 

$result = mysql_query($query); 
$numrows = mysql_num_rows($result); 

echo $numrows; 

while ($my = mysql_fetch_array($result)) { 

$id = $row['user_id']; 
$name = $row['name']; 

} 

如果我评论了这一点,它似乎并没有发生。

编辑:我意识到它与另一个脚本上的变量冲突有关。应该说是发生

$conn = mysql_connect('localhost', 'ggordan_admin', 'valeg0r') or die(mysql_error()); 
mysql_select_db('ggordan_wmin') or die(mysql_error()); 

$query = "SELECT * ". 
      "FROM users ". 
      "WHERE course = '".$_SESSION['course']."' ". 
      "LIMIT 3"; 

$result = mysql_query($query); 
$numrows = mysql_num_rows($result); 

echo $numrows; 

while ($my = mysql_fetch_array($result)) { 

    // if i change $id to $user_id it breaks the login script 
$id = $row['user_id']; 
$name = $row['name']; 

} 
+1

代码?     – 2009-10-26 17:19:26

回答

1

在原因可能是,如果您的网页从http切换到https或不同的服务器,这将导致中创建一个新的会话ID。

0

您的浏览器会记录该会话的cookie,并将其从同一浏览器实例返回给同一个域的所有调用。 (也就是说,如果您有两个不同的IE或FireFox副本启动,它们可能会有不同的会话。

PHP不会对加载和存储以外的会话执行任何操作。会话变量更改的唯一方法是if你可以从你的服务器页面自己改变它们,另外一个问题可能是在存储/检索时序列化/反序列化会话,如果你有复杂的类别,他们可能会在翻译时感到困惑。页面来显示会话变量的内容,在浏览器的新选项卡中启动它,并在每次在其他选项卡上执行页面更新时刷新它。我怀疑这是程序员错误:更换程序员,然后重试。

+0

我有一个页面来显示会话的内容。当第一次加载时,所有内容都会出现,但刷新时会话$ _SESSION ['name']消失。 – Stephen 2009-10-26 17:55:51

0

尝试当我听到这导致一些问题的会议,以去除调用

session_write_close() 

0

我得到的第一印象是,在客户端通过验证后您即将关闭您的会话,对吗?

// if user does not validate close session and take him back to login 
if($useR_login_login_time == 0) { 
    session_write_close(); 
    header("Location: first_run.php");  
    exit; 
    } 
// if user validates DO NO CLOSE SESSION and take him home 
else { 
    //session_write_close(); 
    header("Location: home.php"); 
    exit; 
} 

看看那个逻辑部分,让我知道它是否修复你的问题!

希望它有帮助。

+0

我试过删除session_write_close();但问题仍然存在。 – Stephen 2009-10-26 18:11:30

0

看来问题是register_globals

感谢大家试图回答我过于复杂的问一个简单的问题:)