2015-07-01 82 views
18

我登錄在Banana.com。香蕉有一個關於/app/ajax_loggedin的api鏈接。爲什麼會在通過php中的ajax請求時更改會話ID?

我的網站是猴子。 Monkey運行一個簡單的GET json到香蕉的/app/ajax_loggedin,它返回的登錄值爲1或0.

爲什麼它始終在返回0時,即使我真的在Banana上登錄,並且在訪問鏈接時直接給我1. Banana的開發者如何修復它?

如果是服務器端調用,我會理解它,但我不明白爲什麼它不會告訴我如果im登錄,如果香蕉提出請求。運行session_id()檢查,它會通過ajax生成一個新的每個調用,當直接訪問時它工作得很好並保持不變。

是否有任何修復或其他方式來做到這一點?

+0

聽起來像是在香蕉dev的使用下面的代碼設置需要存儲會話(會話ID存儲在cookie與超時值)在表中。然後它可以查詢表格並告訴你是否仍然登錄。 – Jordan

+0

這將如何解決問題?而不知道猴子中的用戶是什麼。他們只是想知道他們是否登錄到香蕉或不。 – Karem

+0

顯然你必須將它設置爲接受一個參數(userid)來告訴你是否登錄。 – Jordan

回答

8

每個入口點或調用服務器(API)的起始點都需要有session_start()。如果它沒有在會話標識符中讀取,它將會像沒有一個那樣操作,然後返回一個新的會話標識符。當你的瀏覽器得到響應時,它將用新的覆蓋會話標識符。確保您在所有撥打服務器的地方的頂部都有session_start(),以便它知道要使用的會話。

+0

這不是真的,它取決於你使用的PHP版本 – kayleighsdaddy

+1

我很好奇,你能提供一個參考或例子嗎?如果我錯了,我想學習一些新東西 –

+0

我想我站點更正,這是ini文件中關於是否需要使用session_start的一個設置。我只知道,如果使用session_start,我編寫的很多服務器會出錯。關於反對票,它不會讓我脫下來。 – kayleighsdaddy

4

爲什麼你會得到一個新的會話ID被

  • 清除的會話ID的Cookie(通常命名爲PHPSESSID
  • 你訪問一個網頁,名爲session_regenerate_id()(不太可能)
  • 您的會話的原因擊中max lifetime並且是garbage collected。這是如果banana.com有很多遊客的一個明顯的可能性,因爲垃圾收集隨機PHP時調用
  • session_id()有不同的會話

那麼需要做的就是調用?

  • 檢出服務器上的會話文件。他們是簡單的文本,所以你可以打開它們,看看裏面有什麼。確保你的會話存在。
  • 檢查php.ini是否有短期會話。
  • 將會話加載到其他地方並查看是否繼續。使用帶有custom session handler的MySQL/memcached系統可能會發現問題。
5

實際上沒有足夠的信息來確定地回答這個問題。但是,根據這些信息我們可以得出以下結論。

如果您使用標準的PHP會話處理程序,會話cookie將有一個與之相關聯(如果未在php.ini或您的代碼中配置,可能只是該腳本首次調用的域從)。例如,如果您調用一個腳本調用www.stackoverflow.com中的session_start(),並且chat.stackoverflow.com上的另一個腳本啓動了一個會話,它將無法訪問域www.stackoverflow.com中的cookie,從而開始一個新的會話。

cookie標頭中的域可能會冒泡,但不會向下。因此,如果您希望會話cookie有權訪問Banana.com的所有子域,則必須確保在每個與該域的會話初始化請求中正確設置域參數。

session_set_cookie_paramssession_get_cookie_params瞭解更多詳情...

該cookie可用的站點。將域設置爲'www.example.com'將使cookie在www子域和更高子域中可用。可用於較低域名的Cookie(例如'example.com')可用於較高的子域名,例如'www.example.com'。老舊瀏覽器仍然實施已棄用的»RFC 2109可能需要領先的。以匹配所有子域。

此外,還應該注意到,與安全http_only參數設置爲true不會在不安全或JavaScript發起的連接可讀發送諸如在阿賈克斯的情況下餅乾。

2

而不是調用API並檢查會話是否處於活動狀態。如果指定要存儲在配置文件中的會話ID,或者你其實可以檢查是否會話ID後

session_start();  
$session_id=session_id();  
if(isset($_SESSION[$session_id])) 
相關問題