【问题标题】:Laravel 5 new session on every requestLaravel 5 针对每个请求的新会话
【发布时间】:2015-04-12 14:16:29
【问题描述】:

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

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

【问题讨论】:

  • 尝试在config/session.php文件中将域设置为'domain' => '.example.com',
  • 我一直都有这个问题,这不是问题

标签: php angularjs session laravel laravel-5


【解决方案1】:

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

与 api 通信时使用的一种做法是将访问令牌与安全请求一起使用;类似于 oauth2 客户端/服务器关系。通过将 XHR 或 CURL 请求中的令牌发送到您的 api,系统可以更好地验证它正在与谁交谈。否则,您可能会遇到欺骗您经过身份验证的用户的人。

【讨论】:

    【解决方案2】:

    自从我今天工作了这么多小时以来,我现在刚刚完成了以下工作。 我已经编辑了我的 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-07
      • 2018-05-23
      • 2017-06-17
      • 2021-08-19
      • 2022-01-18
      • 2019-01-16
      • 1970-01-01
      • 2016-01-12
      相关资源
      最近更新 更多