2011-08-19 43 views
3

我在我的服務器上的單個域中託管了幾個Facebook應用程序。同一個用戶可能會在一個會話中訪問兩個或更多的應用程序。我如何確保來自一個應用程序的某些數據不會在另一個應用程序中結束?由於用戶可能只需從應用程序導航,因此註銷不是一種選擇。如何在一臺服務器上處理一個用戶的多個PHP會話?

回答

8

如果您爲每個應用程序使用不同的session_name(),那麼這些會話實際上是相互惰性的。

// Application 1 
session_name("APP1"); 
session_start(); 

// Application 2 
session_name("APP2"); 
session_start(); 
+0

尼斯一些數據會保存。我不知道你可以設置不同的會話名稱。我猜他們是與每個指定的應用程序綁定的? – chustar

+1

如果每個應用程序都有自己的會話名稱,那麼是的。 session_name基本上最終成爲會話ID存儲的cookie的名稱。因此,如果每個應用都有其自己的唯一會話名稱,則用戶將會爲每個應用獲得一個cookie,並且每個會話都將是獨立的彼此的。另一種方法是在會話中使用子鍵'$ _SESSION ['app1'] [...]','$ _SESSION ['app2'] [...]'等等...... –

0

我能想到的將包括該人的會話數據使用的應用程序,如果你看到在用戶的會話數據錯誤的會話,你破壞了會議的解決方案。

0

只是一個想法:也許你想爲每個應用程序設置一個子域。這樣cookies和會話就會自動完全分開,而不是依靠某個功能(這可能會很慢,正如一個人在session_name()手動註釋中指出的那樣)。

此外,我相信單獨的子域讓您更安全地利用漏洞因爲相同的原產地政策。 (對吧?)

+0

不是。取決於如何設置Cookie。通常它們都設置在父域中,因此來自site1.example.com的cookie仍然會看到來自site2.example.com的cookie –

0

通過爲每個應用程序使用不同的鍵,您可以製作類似會話部分的內容。你只需要確保密鑰的唯一性。每次你保存在適當的部分例如爲:

//save the ids into db or configuration file after it's generated 
$app1id = uniqid('fbApp'); 
$app2id = uniqid('fbApp'); 

//Save data for application 1 
$_SESSION[$app1id] = array('app' => 'data'); 

//Save data for application 2 
$_SESSION[$app2id] = array('app' => 'data'); 
相關問題