php - 无法使用 Ajax 登录 RESTful 服务器

标签 php javascript jquery ajax session

我正在尝试使用 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/

相关文章:

php - 使用php计算html表中的行

javascript - 传递整数时 chop 宽度函数不起作用

php - Codeigniter activerecord 或 select 语句

php - Cookie 嗅探器 - PHP

javascript - 在 ng-admin 中刷新引用列表

javascript - 嵌入的一个值中的多行(discord.js)

javascript - 使用jade导入jQuery(使用node.js + Express)

javascript - 根据字符在多个输入上添加删除类

javascript - JQuery 日期时间到毫秒

php - html 标签之外的自动链接 url