2010-04-28 127 views
6

我有一个会话创建,当从Safari上的ajax调用时调用它为null。当在Safari浏览器的其他页面中调用PHP会话时为空

header.php 
session_start(); 
$_SESSION['test'] = 'this is my session'; 


mypage.php 
session_start(); 
echo $_SESSION['test']; <-- NOT WORKING ON SAFARI 

感谢

+0

您是否检查过启用了cookies? :) – 2010-04-28 23:40:51

回答

4

它可以在其他浏览器中使用吗? 在没有AJAX的Safari中工作吗? 这个脚本是从原始页面的同一个域加载的吗?

Safari显然有更多conservative cookie policy than other browsers。如果PHP端的所有内容都能正常工作,并且其他浏览器可以正常工作,那么我认为Safari不会将会话cookie发送回服务器。

+0

这通常是Safari的情况。如果您使用的是内联框架,它会有一个非常受限制的第三方Cookie政策,通常会与会话互动。我愿意打赌OP所做的Ajax调用可能会转到一个子域或不同的域,或者涉及到某种iframe。 – zombat 2010-04-29 00:20:30

+0

我听说Safari 4比较好,但我还没有测试过。 – zombat 2010-04-29 00:21:36

0

null还是""

当你if(isset($_SESSION['test']))它是否返回true?

这是唯一的野生动物园?如果是的话,那么你的浏览器设置

您的会话cookie是否保存成功,您可以在header.php页面的其余部分阅读$ _session ['test']?

您是否在页面的最开始处调用session_start()?

你有什么错误吗?如果没有 - 你有没有让他们打开?

1

在两个文件中的session_start()之后加上这一行,并告诉我会话ID是否相同(即表示您在同一会话中)。

echo session_id(); 
3

我面临同样的问题,session_id()不断更改每次刷新,所以safari没有将会话ID存储在cookie中。通过手动添加:

setcookie('PHPSESSID', session_id(), 0, '/');

我得到它的工作。

+0

实际上有一个更精确的函数,它可以设置会话cookie参数 - [session_set_cookie_params](http://php.net/manual/en/function.session-set-cookie-params.php) – SteveB 2014-11-20 11:21:25

相关问题