它是一个 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"即可解决问题