8

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

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

当 Chrome/Firefox 似乎工作得很好时,Safari/IE 存储可能导致此问题的 cookie 的方式有什么区别?

4

4 回答 4

16

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

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

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

原因:由于 cookie 是使用实际时间设置的(即“此 cookie 将在 2013 年 7 月 25 日 15:13 GMT 到期”)。如果您的本地计算机与服务器的设置不同,则 cookie 可能在发送之前就已过期。一些浏览器对此进行了纠正(FF 曾经如此,Chrome 现在也可能如此)。

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

于 2013-07-24T06:09:12.743 回答
2

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

Laravel IE iframe cookie 问题的潜在修复(为我工作)。只需将其添加到您的 App::after 过滤器中。

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"');
    }
});
于 2014-08-22T11:28:14.447 回答
2

我有这个问题,我这样解决:我的 .htaccess 没有将 example.com 重定向到www.example.com并且我想去的网址没有 www 但我登录www.example.com .

而不是这个:

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

我用这个:

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

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

于 2020-10-22T08:51:55.067 回答
0

您需要检查新服务器上的所有内容是否与旧服务器相同......一个较旧或较新版本的软件可以做到这一点,甚至可能是不同的 htaccess 设置......
要考虑的其他两件事......
也许文件得到了在移动过程中损坏......或者服务器端有什么东西搞砸了......我曾经使用的免费托管公司有弹出窗口,并且由于这些弹出窗口,您无法使用常规站点地图进行谷歌索引,因为弹出窗口向您的页面注入了一些东西。

我也刚刚发现这个......会话不会初始化或记住请求之间的状态

我不知道的是,对 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.

而这个[已解决] 会话有时不会跨请求持续存在

于 2013-07-22T17:38:05.337 回答