使用AJAX的PHP会话:登录过程
有人能告诉我这个登录设置哪里出了问题吗?我在下面概述了这个过程,并包括了我正在使用的代码。除了会话变量似乎从未被设置之外,一切都正常 我将它们转发到的页面会将会话变量转储到页面上,除非当您进入下一页时,会话变量似乎不存在。如果我将$\u SESSION变量作为对AJAX调用的json响应的一部分返回,它将返回正确的值,但一旦页面发生更改,这些值似乎就会消失 过程:使用AJAX的PHP会话:登录过程,ajax,jquery,php,Ajax,Jquery,Php,有人能告诉我这个登录设置哪里出了问题吗?我在下面概述了这个过程,并包括了我正在使用的代码。除了会话变量似乎从未被设置之外,一切都正常 我将它们转发到的页面会将会话变量转储到页面上,除非当您进入下一页时,会话变量似乎不存在。如果我将$\u SESSION变量作为对AJAX调用的json响应的一部分返回,它将返回正确的值,但一旦页面发生更改,这些值似乎就会消失 过程: 已提交登录表单 对login.php的AJAX调用 login.php根据数据库检查用户名和密码。 如果找到用户,则为会话设置$会话
如果找到用户,则为会话设置$会话变量, 运行其他一些SQL并返回success,否则返回相应的错误
解决方案:
PHP会话需要在需要访问会话变量的每个页面上启动,除非PHP配置为自动启动会话。感谢Marc B和nunespascal。如果((计数>0)和(计数<2))
?如果(计数=1)
,那就怎么样?这不像你曾经得到过1.5
或0.3
行数据这听起来像是常识,但是你是在logged.php上启动会话的吗?抱歉,超级noob问题即将到来。我是否必须在我想要访问会话变量的每个页面上启动会话?@Stephen:是的,如果PHP没有配置为自动启动会话。并非所有页面都需要会话,因此通常默认为“关闭”。您可以将此答案标记为“已接受答案”,而不是将“解决方案”添加到顶部
$("#login_form_header").submit(function(event){
event.preventDefault();
$.ajax({
url: 'xhr/login.php',
data: $(this).serialize(),
type: 'post',
dataType: 'json',
success: function(result){
if (result.success){
window.location = "logged.php";
return false;
};
},
error: function(e){console.log("Could not retrieve login information")}
});
return false;
});
<?PHP
# Start the user session
if(!isset($_SESSION)) {
session_start();
};
# Make sure form data was passed to the script
IF (isset($_POST['username']) && isset($_POST['password'])){
# Connect to the database
REQUIRE('../../../../db_oystrr.php');
# Define variables
$given_username = $_POST['username'];
$given_password = $_POST['password'];
$given_username = stripslashes($given_username);
$given_password = stripslashes($given_password);
$given_username = mysql_real_escape_string($given_username);
$given_password = mysql_real_escape_string($given_password);
$matched_username = "";
$matched_password = "";
# See if there is matching info in the database
$sql = 'SELECT username, pass FROM users WHERE username="'.$given_username.'"';
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
$pass_hash = *********;
if ($pass_hash == $row['pass']){
$matched_username = $row['username'];
$matched_password = $row['pass'];
};
};
# If there was a match
IF ($matched_username != "" && $matched_password != ""){
# If there is only one result returned
$session_sql = 'SELECT * FROM users WHERE username="'.$matched_username.'" AND pass="'.$matched_password.'";';
$session_result = mysql_query($session_sql);
$returned_row = mysql_fetch_assoc($session_result);
$user_check = mysql_num_rows($returned_row);
IF(count($user_check) > 0 && count($user_check) < 2){
# Set our session values
$_SESSION['id'] = $returned_row['id'];
$_SESSION['last_login'] = $returned_row['last_login'];
$_SESSION['username'] = $returned_row['username'];
$_SESSION['signup_date'] = $returned_row['signup_date'];
session_write_close();
# Set users last login date and time and re-hash their password to this login
$this_login = **********;
$hashed_password = **********;
$update_sql = '************';
mysql_query($update_sql);
echo json_encode(array("success"=>"user logged in", "session"=>$_SESSION));
}ELSE
echo json_encode(array("error"=>"More than one user with the same information. What did you do?!"));
}ELSE
echo json_encode(array("error"=>"Invalid login provided."));
}ELSE
echo json_encode(array("error"=>"You must enter a username and Password."))