2012-04-21 64 views
0

我有一个php脚本,我通过ajax调用初始化用户登录的会话变量。当我稍后检索会话信息时,似乎并不存在。这是缺少的。我必须说我假设$ _SESSION变量在那里。我以前没有这样做过。用户用php/javascript登录

PHP代码,在数据库中搜索用户,并初始化会话变量

while (true) { 
    $md5_pw = md5($password_text); 
    $r_getuser = mysql_query("SELECT * FROM users WHERE (user_name = BINARY '".mysql_real_escape_string($l_un_em)."' OR email = '".mysql_real_escape_string($l_un_em)."') AND (password = '$md5_pw' OR temp_password = '$md5_pw') AND status >= 0"); 
    if (mysql_num_rows($r_getuser) == 0) { 
     /* echo $messages['log_un_em_pw_incorrect']; 
     return; */ 
     $return['return_code'] = -1; 
     $return['return_msg'] = $messages['log_un_em_pw_incorrect']; 
     echo json_encode($return); 
    } 
    $row = mysql_fetch_assoc($r_getuser); 
    /* if ($row['privs'] < 1) { echo $messages['log_no_privs']; break; } */ 
    if ($row['temp_password'] == $md5_pw) { //new password 
     mysql_query("UPDATE users SET password = '".$md5_pw."', temp_password = NULL WHERE user_id = '{$row['user_id']}'"); 
    } 
    $today = date('Y-m-d'); 
    if ($row['login_0'][0] == '9') { //first login 
     mysql_query("UPDATE users SET login_0 = '".$today."', login_1 = '".$today."', login_cnt = 1 WHERE user_id = '{$row['user_id']}'"); 
    } else { 
     mysql_query("UPDATE users SET login_1 = '".$today."', login_cnt = login_cnt+1 WHERE user_id = '{$row['user_id']}'"); 
    } 
    $_SESSION['uid'] = $row['user_id']; 
    $_SESSION['unm'] = stripslashes($row['user_name']); 
    $_SESSION['uml'] = stripslashes($row['email']); 
    $_SESSION['cL'] = $row['language']; 
    /* echo '<meta http-equiv="refresh" content="0;url=livemass_CENTER34.php">'; */ //default page 
    break; 
} 

PHP代码来检索会话变量。

<?php 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

echo 'user id '.$_SESSION['uid'].'<br/>'; 
echo 'username '.$_SESSION['unm'].'<br/>'; 
echo 'uml '.$_SESSION['uml'].'<br/>'; 
echo 'cL '.$_SESSION['cL'].'<br/>'; 

?> 

显示会话信息的Javascript。

$.ajax({ 
     url: "get_session_info.php", 
     type: "GET", 
     data: {}, 
     cache: false, 
     async: false, 
     success: function (response) { 
     alert ('session info response <br/>'+response); 
     }, 
}); 
+0

我看不到'session_start();'在任何地方? – Halcyon 2012-04-21 16:06:07

+0

请发布整个php代码而不是片段..你确定你添加了session_start()?它应该被添加到每一页上你打算使用$ _SESSION – arijeet 2012-04-21 16:08:01

+0

请停止用古老的'mysql_ *'函数编写新代码。他们不再被维护,社区已经开始[弃用流程](http://news.php.net/php.internals/53799)。相反,您应该了解[准备好的陈述](http://en.wikipedia.org/wiki/Prepared_statement)并使用[PDO](http://php.net/pdo)或[MySQLi](http:// php.net/mysql)。如果你关心学习,[这里](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)是一个相当不错的PDO相关教程。 – 2012-04-21 16:08:38

回答

0

要建立在什么@Frits说。要使用php会话,您必须将函数session_start();放置在您想要访问的每个页面的开始位置$_SESSION之上。