我正在尝试使用 ajax 设置登录系统。
用户在 subdomain.domain.com (也可能是 otherdomain.com)中插入他的登录名和密码后,我向rest.domain.com 发出 Jquery $.post 请求,并且用户正确登录。
然后,如果我向rest.domain.com 发出另一个请求来检查用户是否已登录(或进行其他需要用户登录的操作),则 session 为空。
我做错了什么?
编辑
客户端应用
$.post('http://rest.domain.com/user/login',form,function(data){
//Do what is needed
});
RESTful 应用程序(使用 Slim 和 uFlex)
header('Access-Control-Allow-Origin: *');
session_start();
//User
//Check if logged
$app->get('/user/logged', function () use ($user, $app){
print_r($_SESSION);
echo $user->signed;
});
//Login
$app->post('/user/login', function () use ($user, $app) {
$username = isset($_POST['email']) ? $_POST['email'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
$auto = isset($_POST['auto']) ? $_POST['auto'] : false;
$user->login($username,$password,$auto);
if($user->signed){
print_r($_SESSION);
}else{
//Display Errors
foreach($user->error() as $err){
echo "<b>Error:</b> {$err} <br/ >";
}
}
});
最佳答案
我认为您违反了同源政策。您不能向不同的域发出 Ajax 请求,或者至少 SOP 是这么规定的。所以这是你应该考虑的事情。
完成上述过程后,使用浏览器检查存储的cookie。这些 Cookie 是按子域存储的,因此您的 PHP_SESSID
Cookie(如果您使用的是 $_SESSION
)可能存在于错误的子域中。
您能否提供有关如何存储 session 的更多信息?
无论上述情况如何,最好将所有 Ajax 请求定向到同一子域、协议(protocol)等上的同一目标 ajax.php
文件。(SOP 的所有规则)并在服务器级别路由请求。
关于php - 无法使用 Ajax 登录 RESTful 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848873/