2009-02-21 74 views
0

我有兩個應用程序,一個是前端應用程序,另一個是後端應用程序。在另一個應用程序中銷燬會話變量

每個應用程序都有自己的相同用戶數據庫的副本。當用戶登錄到前端應用程序時,我還將使用後端應用程序提供的Web服務同時登錄後端應用程序。

現在的問題是我有可能從前端應用程序銷燬後端會話嗎?後端使用$ _Session超全局數組來存儲所有會話信息。如果是,如何?

回答

1

是的。

我認爲你正在使用相同的會話ID名稱前後。我認爲默認是PHP_SESSID。如果是這種情況,那麼所有的會話細節將被存儲在一個位置。

我也認爲,前端和後端的領域是相同的。如果它不同,那麼它不會工作,因爲Web瀏覽器不會共享不同域之間的會話信息。

如果您爲前後端使用不同的會話ID名稱,那麼您將不得不變得棘手。 (兩者的會話ID都在請求數據中,您只需加載兩個會話並銷燬它們。)

使用:

session_destroy(); 
0

您需要從數據庫或文件中刪除會話記錄(取決於系統的配置)。您可以使用session_save_path來確定目錄。使用存儲在數據庫而不是文件系統中的會話幾乎肯定會容易得多。

0

如果您可以使用後端應用程序公開的Web服務記錄用戶IN,爲什麼不能用它來記錄用戶OUT?這樣一個應用程序不必知道另一個應用程序是如何實現會話的(或者在那裏有特權)。

如果這是不可能的,你必須按照acrosman的建議去做,並挖掘會話文件或數據庫。

+0

作爲,因爲它似乎不可思議,在Web服務只包括登錄,但沒有註銷。其實後端不是由我寫的(它是由別人寫的,我最好不要碰它),所以我在這裏沒有選擇。 – Graviton 2009-02-21 04:22:00

0

您如何將前端會話與後端會話相關聯?如果您保留前端和後端會話的會話名稱(用作會話ID的唯一值)的映射,那麼您可以輕鬆找到後端會話(可將其保存在文件或數據庫上),然後刪除會話記錄。 使用這條線,找出哪些處理程序被用來存儲會話文件:

$handler = init_get('session.save_handler'); 

您可以使用此行來找出會話文件存儲:

$path = ini_get('session.save_path'); 

,那麼你可以刪除會話文件或數據庫記錄。

您還可以創建Web服務方法來銷燬後端會話,然後從前端調用它。

0

如果這兩個應用程序位於同一個域的不同子域中,則可以保存一個cookie,指示管理應用程序該用戶已註銷。然後讓管理應用程序本身刪除會話和「註銷」cookie。