2011-05-22 12 views
1

我遇到了問題。我希望你能幫我解決它。我用Jquery調用子域腳本時看不到SESSION變量(ajax)

我正在與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. 阿賈克斯(jquery)請求channel.foo.cz/getNews.php
  3. getNews.php返回此信息:

    array()array()

  4. 它看起來沒有設置cookie和會話。但!如果我看着我的FF的cookie的瀏覽器,我看到該域這些Cookie在聊天室設置爲.foo.cz
  5. 如果我嘗試複製Ajax請求的URI並將其粘貼到瀏覽器的網址,它返回我

    陣列([用戶名] =>馬丁)陣列([SESSID] => some1D65a4s6d54asd)

如何可能?對不起,長期的問題,並感謝所有的答案!

回答

1

我明白了。 瀏覽器限制發送cookie到另一個子域 所以我使用了發送請求到我的子域的iframe。但是,當有消失的會議時,會出現一些問題。解? php.ini:

suhosin.session.cryptdocroot=Off 

suhosin.cookie.cryptdocroot=Off 
1

您需要查看session_set_cookie_params函數的第三個參數。它設置了帶有SID的cookie所在的域名。

+0

我說有ini_set('session.cookie_domain','.bidmanie.cz'); 當我查看FF cookie瀏覽器時,我看到了正確的域。我現在指出,jQuery不會發送會話ID,所以我每次都會收到新會話ID! – genesis 2011-05-22 20:21:31

+0

所以它看起來像一些Javascript或jQuery的bug。 – 2011-05-22 20:38:07

+0

我試過這個:.ajax({timeout:52000,headers:{Cookie:「PHPSESSID =」+ SSID},url:'http://channel.foo.cz/getNews.php?__ ='+ SSID}) ;但請求頭不會改變(沒有cookie:頭指定) – genesis 2011-05-22 21:51:15