2015-03-31 155 views
1

我們目前正在使用一個自定義登錄系統,它在一個站點的數據庫中設置一個散列,然後當用戶在域和子域之間進行傳輸時,它將它們登錄進來。它並不總是將用戶登錄,因此他們點擊在登錄鏈接/按鈕上,它將他們帶到登錄頁面,如果他們有會話,則會加載它,否則會顯示登錄頁面。session_set_cookie_params是否安全?

我們想擺脫這種情況,並使用更好的東西。用php有session_set_cookie_params,我們想知道這是安全的嗎?

session_set_cookie_params(3600, "/", ".example.com"); 

如果這不是跨多個域使用會話的好方法,那麼更好的方法是什麼?

我們也有一些子域使用他們自己的登錄系統,其中同一用戶在該系統上有不同的用戶名/密碼,這會是一個問題嗎?我們覺得有可能兩個不同的人可以擁有相同的會話ID,並將兩個不同的人登錄到同一個帳戶,因爲他們管理着自己的會話。

+3

安全的/從什麼?安全不是營銷表上的核對清單。你不能僅僅通過在食物上撒鹽一些代碼來神奇地製造一些「安全」的東西。 – 2015-03-31 15:04:01

+0

我認爲主要是用戶** A **作爲用戶登錄** B **我也是閱讀一篇博客說**不要與子域**分享,但他們從來沒有說過爲什麼。 – 2015-03-31 15:06:27

回答

1

這是一個很好的方法,但是您必須考慮,如果您希望涉及同一個會話的所有域/子域不在同一臺服務器上或駐留在不同的應用程序中,則需要提供一些通用後端會話 - 存儲機制,所有應用程序都可以訪問會話數據。

就處理多次登錄而言,您可能需要一種邏輯方式將登錄鏈接在一起,以便您能夠理解一次登錄下的有效會話可能會轉移到另一個域上的另一次登錄。這實際上是您最大的安全問題,應該通過實施單一登錄機制解決。

+0

我們正在使用memcache進行會話存儲,因此它們應該被鏈接。如何/你會建議登錄服務** B **從服務** A **其中我的ID = 1 ** **和您的ID ** ** ** ** **?我現在將從數據庫中提取數據作爲ID 1這將是你... – 2015-03-31 15:15:39

+0

@TheBoogieMan現在,這是問題不是它。除非您有辦法將每個應用程序中的ID映射到某個唯一的用戶特定ID,否則無法處理該用戶跨越應用程序邊界。希望你有一些通用的方式來連接跨應用程序的帳戶(例如電子郵件地址,用戶名等)。 – 2015-03-31 15:23:35

+0

我們的3項服務在沒有貼圖的情況下可以正常工作,因爲它們共享相同的用戶羣,其餘的用戶羣擁有自己的用戶羣(由於CTO設計不佳)。但是,是的,他們都包含用戶的電子郵件地址,可用於將非相關應用程序鏈接在一起! – 2015-03-31 15:33:20