我想我忘記了代碼中的某些東西,但找不到什麼。PHP會話和AJAX請求(來自注入的JS代碼)
在我的服務器上我有簡單的logging.php
文件。 如果我通過user/password
參數,則會創建一個新的會話。 如果我通過loggout
會話被銷燬。 如果我通過report
屏幕上報告當前會話變量的列表。
如果我在瀏覽器中測試編寫網址的代碼,所有工作正常。首先調用.../logging.php?user=xxx&password=xxx
。會話開始並向我報告會話變量。最後我銷燬了通過logout
參數的會話。
如果用戶請求report
或logout
並且沒有會話存在HTTP-401
錯誤代碼返回給客戶端。
另一方面,我有一段JavaScript代碼,我可以使用書籤在網頁上注入。一旦代碼注入,我會顯示一個工具欄,用戶可以在其中寫入用戶/密碼併發送到服務器。
日誌記錄動作似乎正常,服務器返回200狀態碼,但後來如果我向logout
發出請求,服務器返回401錯誤,這意味着沒有會話存在。
我正在使用chrome並查看HTTP請求,並且響應可以看到當我登錄服務器時返回不同的值爲PHPSESSIONID
。 這意味着兩個不同的AJAX
請求被視爲不同的會話。服務器似乎無法識別來自AJAX
的第二個請求,就好像它是由同一客戶端啓動的一樣。
重複,PHP
代碼工作正常,如果我直接使用瀏覽器執行,但沒有AJAX請求,所以我想我忘了AJAX中的東西。
任何想法?
在此先感謝。
更新
要,我的問題是從JavaScript調用PHP更簡潔。看起來沒有開始的會話。
想象一下,一個非常簡單的PHP代碼:
的logging.php:給定一個用戶名/密碼啓動一個新的會話,也商店的用戶名作爲一個會話變量。
request.php:它返回存儲爲會話變量的用戶名。
logout.php:破壞會話。
我的第一個AJAX請求啓動一個PHP會話。這似乎很好,因爲PHPSESSIONID cookie是從服務器返回的。另外我將用戶名存儲爲會話變量。
第二個AJAX請求嘗試獲取用戶名(存儲在會話中),但它什麼都沒有,另外還有一個新的PHPSESSIONID cookie從服務器返回。
我知道這似乎是不可能的,當我使用瀏覽器url請求進行測試並且工作正常時,它是事實。
我忘了AJAX,到期時間或類似的東西?
再次更新
我做了一些測試,我發現這個問題,但沒有解決方案。
我的JS代碼是通過書籤注入的。 當我從我的服務器的HTML頁面注入代碼時,AJAX請求正常工作。第一個(日誌記錄)請求獲得一個PHPSESSID,該請求在隨後的請求中傳遞給服務器。
另一方面如果我加載google.com並注入代碼,第一個(日誌記錄)請求也會獲得PHPSESSID,但稍後它將不會隨下一個請求一起發送。
任何人都遇到過同樣的問題?這是問題嗎?
在此先感謝。再次
更新,再次
好了終於讓我找到了我的問題。因爲我的JS是從不同的域注入的(當前頁面來自domainA,而我的JS代碼來自domainB),Cookie不會跨域,所以可以共享PHPSESSID。
可能的結果是當我登錄時,我將返回JSON數據的PHP會話ID並將其用於後續調用。
您可以提出您的問題conscise ..並清除 – 2011-02-27 12:17:51
如果您有更新或更改您的問題,請包括他們通過編輯原始問題。我已經將您的帖子轉移到了您的問題。 – Sampson 2011-02-27 18:21:22