用Jquery(ajax)调用子域脚本时,我没有看到SESSION变量

我有一个问题。 我希望你能帮助我解决它。

我正和LONG POLLING创建聊天。 为了保持主域ajax请求(发送消息)不受影响(未排队),我不得不将我的长轮询脚本放到子域。 所以我有2个“域名”

foo.cz channel.foo.cz

我现在不介意任何同源政策

header("Access-Control-Allow-Origin: *"); 

在那个脚本的顶部。 我也用

 ini_set('session.cookie_domain', '.foo.cz'); 

在所有脚本(发送,接收,聊天室)。

为了调试,我在我的channel.foo.cz/getNews.php中得到了这个:

 print_r($_SESSION); print_r($_COOKIE); die(); 

我的问题是:

  1. 我加载聊天室
  2. Ajax(jquery)请求channel.foo.cz/getNews.php
  3. getNews.php返回:

    arrays()数组()

  4. 它看起来没有设置cookie和会话。 但! 如果我查看我的FF cookie浏览器,我确实看到chatRoom中设置的这些cookie的域名是.foo.cz
  5. 如果我尝试复制ajax请求uri并将其粘贴到浏览器url中,它会返回给我

    array([username] => martin)array([SESSID] => some1D65a4s6d54asd)

怎么可能? 很抱歉很长的问题,感谢所有的答案!

你需要查看session_set_cookie_params函数的第三个参数。 它设置具有SID的cookie在其中有效的域名。

我懂了。 浏览器限制将cookie发送到另一个子域所以我使用了向我的子域发送请求的iframe。 但是,当会话消失时会出现一些问题。 解? php.ini中:

 suhosin.session.cryptdocroot=Off suhosin.cookie.cryptdocroot=Off