jquery ajax无法创建php会话
我有一个index.html
页面,点击一个链接沿着登录表单滑动。
登录按钮的click事件对PHP脚本执行Ajax,成功时用户将被重定向到另一个页面(test.php
)。jquery ajax无法创建php会话
问题是:我没有得到任何错误。
浏览器创建一个PHPSESSID,页面不会重定向。
直接浏览test.php
结果$ _SESSION变量未定义错误。下面
代码:
PHP登录脚本:
<?php
$servername = "localhost";
$username = "abcd";
$password = "12345";
$dbname = "abcdmaster";
$obj = new stdClass();
$obj->msg = '';
$obj->err = '';
$obj->uname = '';
// Create Database connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if($conn->connect_error) {
die("connection failed: " . $conn->connect_error);
} elseif(isset($_POST['userid']) and isset($_POST['password'])) {
session_start();
$username = $_POST['userid'];
$password = $_POST['passwd'];
$sql = "select * FROM `adminuser` WHERE username=$username";
$result = $conn->query($sql);
if($result->num_rows == 1) {
$row = $result->fetch_assoc();
if(strcmp($row['password'],$password)==0) {
$obj->msg = "yes";
$_SESSION['username'] = $row['username'];
$obj->uname = $_SESSION['username'];
} // end strcmp
} else {
$obj->msg = "no";
//$obj->err = "Invalid Login Credentials";
}
header('Content-Type: application/json');
echo json_encode($obj);
return false;
} // end isset
?>
的jQuery:
/* click event for login button */
$('.loginrow').on('click', 'input[value="Login"]', function() {
var creds = {}
creds.userid = $('#userid').val();
creds.passwd = $('#password').val();
console.log(creds);
$.ajax({
url: 'http://localhost/server/adminlogin.php',
data: creds,
type: 'POST',
dataType: 'json',
}).done(function(data) {
if(data == 'yes') {
console.log("login ok");
window.location.href = './server/test.php';
} else {
console.log("login unsuccessful");
}
});
return false;
});
test.php的:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Echo session variables that were set on previous page
echo "Logged on user is " . $_SESSION["username"] . ".<br>";
?>
</body>
</html>
任何想法?
-
请看看你的Ajax
done
:.done(function(data) { if(data == 'yes') { console.log("login ok"); window.location.href = './server/test.php'; } else { console.log("login unsuccessful"); } });
data
是JSON对象这里,所以(data == 'yes')
永远是假的。
您应该检查(data.msg === 'yes')
。
-
使用
xhrFields: {withCredentials: true},
在AJAX设置,以保持会话cookie:$.ajax({ url: 'http://localhost/server/adminlogin.php', data: creds, type: 'POST', dataType: 'json', xhrFields: {withCredentials: true}, ...
感谢您的回复,但没有任何变化。 –
发现在adminlogin.php
代码一个错字,线
elseif(isset($_POST['userid']) and isset($_POST['password']))
应该是
elseif(isset($_POST['userid']) and isset($_POST['passwd']))
如jQuery的阿贾克斯创造一个像对象:
var creds = {}
creds.userid = $('#userid').val();
creds.passwd = $('#password').val();
非常感谢大家的帮助esp Kosh和Louys,正如您所建议的,也有助于解决这个问题。 –
添加'在session_start();'在adminlogin.php ...... –
你必须在session_start添加到您的第一页 – Icewine
哎呀......你的代码是脆弱的到SQL注入,你需要解决这个问题,另外,你需要以明文存储密码,这也是你需要修复的。 – Enstage