2014-06-21 78 views
-2

我的本地計算機上有一個頁面,其中包含與遠程服務器交互的腳本。對於每個請求,它都會得到不同的PHPSESSID值。這是否與頁面沒有與域相關聯?有沒有辦法解決這個問題,也許可能是手動設置PHPSESSID或php.ini會話cookie不會保留在本地頁面,遠程服務器上?

看,我不知道降薪是從哪裏來的,或者是要求關閉的要求。看起來像是在拖我。這不是編碼錯誤。這是服務器錯誤。代碼將無能爲力。嚴重的是,由於平原和標準,你就可以了,這樣的:

$.post('http://example.com/server.php',{'stuff':'data'},function(){ 

}); 
// PHPSESSID is 545ty789gh78rhr 

然後,當我再次調用它:

$.post('http://example.com/server.php',{'stuff2':'data'},function(){ 

}); 
// PHPSESSID is fnunurhf894fh 

然後,PHP頁面上:

session_start(); 
if(isset($_POST['stuff']) $_SESSION['variable'] = '123'; 

if(isset($_POST['stuff2']) echo $_SESSION['variable']; // Returns nothing, as the PHPSESSID cookie value has changed 

因此,我認爲它要麼在php.ini之內,要麼與php如何處理沒有http域的會話cookie有關(只需訪問服務器的本地腳本)。我想知道是否有php.ini會解決它,或者如果有辦法手動設置PHPSESSID的(如果沒有辦法通過php.ini)。

+0

在我的本地計算機上使用php會話的ajax調用。相當標準。無需代碼。 Cookie隨每個Ajax調用而改變。特別是,'C:\ website \ page.html'。我不明白歧義是從哪裏來的。 – JVE999

+0

謝謝。我不知道如何。我想這可能會使它更清晰。 – JVE999

回答

1

我認爲你的問題是cookie存儲在每個域級別。您的瀏覽器在本地主機上運行,​​並且服務器在example.com上運行。因此,當第一個Ajax請求發出時,瀏覽器收集所有本地主機cookie並將它們一起發送。服務器找不到example.com PHPSESSID cookie,因此它會創建一個並啓動一個新會話。當請求返回給瀏覽器時,爲example.com設置一個cookie。當第二個請求發生時,瀏覽器查找它爲本地主機提供的任何cookie,找不到任何cookie,並重復該過程。

默認情況下,不允許跨域ajax請求。您可以通過嘗試jsonp請求來解決問題。有關更多信息,請參見jQuery's documentation

+0

這正是我的想法。考慮到'$ .post'實際上只是'$ .ajax'的別名,我認爲這不會起作用。然而,你所說的話證實了我的想法。到目前爲止,我唯一可以找到的方法是使用[本頁]上的第一個註釋手動設置會話ID(http://www.php.net//manual/en/function.session-id.php)。我也認爲'php.ini'中的[這個變量](http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain)可能是一個答案,但是我我不確定。這將是理想的,因爲手動設置ID有點麻煩。 – JVE999

+0

我想我可能剛剛找到了原因!這是一個Chrome問題,http://stackoverflow.com/questions/335244/why-does-chrome-ignore-local-jquery-cookies我試圖手動發送最後一個會話ID,然後意識到我根本沒有cookie。 – JVE999

相關問題