切换服务器后,为什么Laravel Sessions在Safari和IE中失败?

时间:2013-06-25 12:57:51

标签: php laravel session-cookies laravel-3 missing-cookies

具有Webmin,Apache Centos 6,Laravel应用程序和旧数据库架构的新VPS服务器。所有在旧共享主机上工作正常,但由于某种原因,在VPS上Laravel的会话存储(Laravel 3.0)不再适用于Safari或Internet Explorer。

似乎会话ID在客户端上没有保存。是强制Laravel会话ID保存在客户端浏览器上的好方法吗?

当Chrome / Firefox看起来运行得非常好时,Safari / IE存储Cookie可能会产生此问题的方式有何不同?

4 个答案:

答案 0 :(得分:15)

如果服务器上的时间/时区不正确,Cookie可能会扭曲。检查服务器上的时区/时间设置。

请注意,您需要检查操作系统中的实际时间/时区,而不仅仅是PHP中的时区。但您可以通过将PHP中的时区(date_default_timezone_set())设置为当地时间并向PHP询问日期来验证使用PHP;如果它不匹配则服务器设置不正确。请注意,调整PHP中的时区以使其看起来正确无法解决cookie问题,您必须使用操作系统中的“日期”正确设置操作系统时间/时区。

验证这是否是问题的另一种方法:将Cookie设置为在一年内过期 - 它们是否显示?如果时区错误,那么这些将显示(>时区差异),但2小时的cookie可能不会(

原因:由于使用实际时间设置了Cookie(即“此Cookie将于2013年7月25日15:13 GMT到期”)。如果本地计算机的设置与服务器不同,则cookie可能会在发送之前显示已过期。有些浏览器对此做了正确的判断(以前用过FF,Chrome现在也可以)。

由于此处更改的是服务器,请检查服务器上的时间。 (还要仔细检查自己的计算机)。

答案 1 :(得分:2)

这是一个经典的IE / Safari跨域/ iframe问题。

Laravel IE iframe cookie问题的潜在修复(对我有用)。只需在过滤后将其添加到App ::

App::after(function ($request, $response){
  $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS"');
});

你甚至可以为我指定你需要这个标题的路径,它是/ external /之外的所有内容,所以代码看起来像这样:

App::after(function ($request,$response){
    if($request->is('external/*')){
        // IE iframe cookie fix
        $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
    }
});

答案 2 :(得分:1)

我有这个问题,我这样解决: 我的.htaccess不会将example.com重定向到www.example.com,并且我要访问的URL没有www,但是我登录了www.example.com

代替此:

ajax:{
 url: "https://example.com" + "/user_list"
 }

我用了这个:

ajax:{
 url: "https://" + window.location.hostname + "/user_list"
 }

通过此替换,您将继续输入的任何地址。带有或不带有“ www”

答案 3 :(得分:0)

您需要检查新服务器上的所有内容是否与旧服务器相同...可以使用旧版本或更新版本的软件,甚至可以使用不同的htaccess设置...
其他2件事要考虑...
移动过程中,文件可能已损坏... 或者在服务器端有些东西弄乱了......我以前使用的免费托管公司有弹出窗口,而且由于那些弹出窗口你不能使用常规站点地图进行谷歌索引,因为弹出窗口向页面注入了一些内容。

我也刚刚发现了这个...... Session won't initialize or remember state between requests

  

我不知道的是,对setcookie的调用会自动加前缀   具有句点(。)的域以实现兼容性。哪个在根级别   域名,它将使所有cookie都可以访问   子域。哪个,没有意识到这一点,给了我2个会话cookie和一个   发生了大混淆。

     

似乎有两种方法可以解决这个问题:

Set the cookie configuration value to something else.

Set the domain to "www.example.org" so that it is only available to the root-level domain name.

这是[solved] Sessions sometimes not persisting across requests