Laravel 5 每个请求的新会话

Laravel 5 new session on every request

我有以下设置: Laravel5 和 AnguarlJS Angular 在前端向 Laravel5 后端发送 $http 请求。 前端在 test.example.com 上,后端在 api.example.com 上 我现在遇到的问题如下。 该站点在启动时测试用户是否有一个打开的会话,如果它内部有一个与我们的数据库匹配的令牌。 如果不是,用户可以像往常一样使用他的凭据登录。登录时,创建的令牌成功保存到我们的数据库中,令牌应保存到会话项中。完成后,再次检查用户是否正确登录,但显然会话为空。 我们注意到 Laravel 为我们从 AngularJS 发出的每个请求创建一个新会话。原因可能是来自不同子域的JS请求是跨域请求,浏览器没有发送cookie来识别会话。这可能是原因。

显然我不知道这个问题的解决方案。

由于网络是无状态的,仅使用 header 信息或域可能会导致中间人攻击。来自客户端的任何内容都可以修改或复制,包括 cookie 数据。我在这里没有你的确切问题的答案,但我会推荐一个不同的策略。

与 api 通信时使用的一种做法是对安全请求使用访问令牌;类似于 oauth2 client/server 关系。通过在 XHR 或 CURL 请求中向您的 api 发送令牌,系统可以更好地验证它正在与谁交谈。否则,您可能 运行 陷入欺骗您的已验证用户的行列。

自从我今天工作了这么多小时以来,我现在刚刚完成了以下工作。 我已经编辑了我的 nginx 配置以服务于 api ,而不是在子域上,而是在子文件夹上。我的配置如下所示:

location /api {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    index index.php;
    alias /srv/www/htdocs/api/public;
    if (-f $request_filename) {
        break;
    }

    ## Check for file existing and if there, stop ##
    if (-d $request_filename) {
        break;
    }

    ## If we get here then there is no file or directory matching request_filename ##
    rewrite (.*) /api/index.php?$query_string;

    ## Normal php block for processing ##
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

}