PHP 会话数据未通过 AJAX 调用保存



它是一个 AJAX 登录脚本

.HTML:

<form class="ajax-submit" method="POST" action="https://example.com/api/accounts">
<div class="form-group">
<input type="text" class="form-control" name="uname" placeholder="Username or Email" value="">
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="Password" value="">
</div>
<div class="form-group">
<button class="btn btn-primary btn-block" type="submit">
Login
</button>
</div>
</form>

这里真的没有什么有趣的,它只是一个通过 AJAX 提交的表单。
这是操作文件 (https://example.com/api/accounts(:

if($DB->AuthUser($email, $password)){
$success = true;
}else{
$success = false;
}
if($success){
$json->success = true;
$json->redirect = "https://example.com/?in-development";
}else{
$json->success = false;
$json->messages->password = "Wrong email or password";
}

如您所见,会话数据是在数据库类($DB->AuthUser 函数(中设置的,它是第三个文件(不知道这是否会导致某些事情(。

public function AuthUser($field, $password)
{
session_start();
$stmt = $this->conn->prepare("SELECT * FROM user_profiles WHERE (`email` = ? OR `username` = ?) LIMIT 1"); 
$stmt->execute(array($field, $field)); 
$row = $stmt->fetch();
if(empty($row))
{
return false;
}
if(password_verify($password, $row['password'])){
//set session data
$_SESSION['user'] = $row;
return true;
}else{
return false;
}
}

这是JS:

var formData = new FormData(this);
$.ajax({
url: $(this).attr('action'), 
type: 'POST',
data: formData, 
cache: false,
processData: false,
contentType: false,
dataType: 'json',
success: (function( data ) { ... }

一切正常,除了会话数据不保存在请求上(它确实在没有 AJAX 请求的情况下保存,但我不想删除它(

已修复:所以基本上,我对跨域策略有问题(带有 www 和没有 www 的链接被区别对待(。因此,我没有从请求中取回饼干。只需将表单操作从"https://example.com/api/accounts"编辑为"https://www.example.com/api/accounts"即可解决问题

最新更新