具有Webmin,Apache Centos 6,Laravel应用程序和旧数据库架构的新VPS服务器。所有在旧共享主机上工作正常,但由于某种原因,在VPS上Laravel的会话存储(Laravel 3.0)不再适用于Safari或Internet Explorer。
似乎会话ID在客户端上没有保存。是强制Laravel会话ID保存在客户端浏览器上的好方法吗?
当Chrome / Firefox看起来运行得非常好时,Safari / IE存储Cookie可能会产生此问题的方式有何不同?
答案 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