我正在尝试创建一个使用ajax的简单登录系统,但我遇到的问题不会设置$ _SESSION。
login.js:
$('#bt-login').click(function(){
var login = $('#login').serialize();
$.ajax({
type: "POST",
url: 'widgets/Login/loginFunction.php',
data: login,
cache: false,
success: function(msg){alert(msg)}
});
});
loginFunction.php:
<?php
include_once '../../dbConfig.php';
include_once '../../config.php';
session_start();
$usr = mysql_escape_string($_POST['username']);
$pass = mysql_escape_string($_POST['password']);
$remember = intval($_POST['rememberMe']);
$row = mysql_fetch_assoc(mysql_query("SELECT usr, id FROM members WHERE usr='".$usr."' AND pass='".md5($pass)."'"));
if($row['usr']){
$_SESSION['usr'] = $row['usr'];
$_SESSION['id'] = $row['id'];
$_SESSION['rememberMe'] = $remember;
setcookie('DirtPileGames',$remember);
}
?>
现在由于某种原因,loginFunction.php没有设置$ _SESSION。我刷新了,$ _SESSION是空白的。
有没有人知道为什么这不起作用。
答案 0 :(得分:2)
确保每次要访问或设置会话变量时都调用session_start()。刷新页面时它将为空,除非您首先调用session_start()。
答案 1 :(得分:1)
不知道具体问题,因为假设你不是偶然在某个地方调用session_destroy(),会话应该是有效的。一些调试建议 - 确保session_id()在页面上匹配;如果不是有趣的东西正在发生。可以尝试显式调用session_write_close()。另外在$ _SESSION中为错误情况设置一些东西(当用户不存在时)以确保它不是一个简单的逻辑错误。另外,请不要使用md5。使用sha的一些变体,加盐。
编辑:你提到session_name()
此调用修复了会话的名称,因此您可以在其他页面上引用它。如果你在另一个页面上执行session_start()而没有以相同的方式命名会话,它将产生一个具有新id的新会话。
从php文档中注意:会话名称在请求启动时重置为存储在session.name中的默认值。因此,您需要为每个请求调用session_name()(并且在调用session_start()或session_register()之前)。
答案 2 :(得分:0)
会话依赖于cookie,试着忽略
setcookie('DirtPileGames',$remember);
看看这是否解决了这个问题,很多问题都取决于你的php堆栈。