2011-03-01 48 views
2

我有一個檢索http會話變量的問題。我有兩個服務器,一個碼頭和一個Apache。 Apache和Java中的兩種語言PHP在碼頭。當用戶登錄到網站時,他或她的配置文件ID將以Session變量的形式存儲在PHP中的Apache服務器中。我可以以某種方式從使用Java的Jetty服務器檢索此會話變量嗎?跨語言和服務器http會話變量

回答

2

對於跨服務器會話,您可以將會話保留在Cookie中。但是你需要確保使用一些強大的算法和密鑰來加密這些cookie。

如果您只想存儲用戶ID。然後,您可以將ID存儲爲其公開ID,並將其與該ID一起存儲,如果ID與您一樣可以使用簽名來檢測它。

認證

1. One contains ID and 
    2. other contains signature of ID like using function in php called hmac_hash 

hmac_hash

後創建兩個Cookie無論你這就需要身份驗證的請求。

1. Using ID and same secret generate same signature back. 
    2. Check if the signature you generated is same as one you got in cookie. 

警告:輕微的失誤也會造成數據公開。
警告2:大型cookie會讓網站變慢一點。

+0

我並不擅長安全性,但強大的加密功能以及Cookie如何幫助提高用戶的安全性?與存儲普通Cookie不同嗎? – einstein 2011-03-01 06:46:30

+0

在會話中,如果您存儲一些不應公開的數據,可能是他的姓名或電子郵件。在這種情況下,如果數據被加密,那麼複製cookie的人將無法解密並知道實際數據是什麼。既然你有密鑰解密它,你可以讀取數據。 – Zimbabao 2011-03-01 06:48:49

+0

@津巴寶:你能告訴我如何在PHP中做到這一點? – einstein 2011-03-01 07:11:22

0

是不是我,我會試圖重寫會話處理程序在PHP中,並將會話的東西存儲在數據庫中。請參閱http://us2.php.net/manual/en/function.session-set-save-handler.php

您可以控制會話變量的存儲方式和存儲位置。你可以從cookie中讀取會話句柄或任何其他語言的任何東西,併爲java端編寫你自己的東西。

+0

是的,但是當從本地會話轉移到數據庫持久會話時,會有巨大的性能影響。 – FearUs 2011-03-01 07:42:58

+0

改爲使用memcached會話處理程序。它工作出色。 – 2012-03-07 17:57:04