2011-09-26 19 views
0

我有一箇舊的網站(servlets,JSP和Struts)。目前會話管理使用Cookie進行處理。我想重新設計這個網站以使瀏覽器獨立。沒有Cookie和URL重寫的會話處理

我知道有一個替代URL重寫,但是這對我來說是不可行的重寫(編碼)我的應用程序中的所有URL。

我正在尋找一個解決方案,不應該影響我的代碼太多。請建議我,如果有任何人有可行的解決方案。這對我很有幫助。

Regards, Lokesh Rangineni。

+0

java HttpSession怎麼樣? –

+0

@SérgioMichels:這是由cookie支持(另請參閱http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/3106909#3106909)。他顯然想完全禁用它。 URL重寫是cookie的唯一替代方法,但OP顯然不希望將其用於某些不明顯的原因。也許這很費時間,但重新創建HttpSession需要更多時間... – BalusC

回答

0

至於我能想象,只有比URL或Cookie的會話令牌是如此骯髒的和不切實際的,我不會推薦它另外一個第三個選項;),但在這裏我們去:

有一個隱藏的表單字段與每個頁面上的會話標記和每個請求到服務器必須是提交包括隱藏字段值的表單。

+0

我假設具體會話然後存儲在應用程序範圍中的某個映射中?並且不要忘記更改普通的GET鏈接以包含會話令牌。畢竟,用這種方法你基本上是重新創建了整個HttpSession和URL重寫。 – BalusC

1

這沒有意義。只需使用URL重寫。否則,你基本上最終會重新創建整個HttpSession的概念。您需要更改代碼中使用HttpSession的每一行。這需要比修復你的web應用更多的時間來利用URL重寫。咬下子彈,並將其作爲吸取的教訓,這樣你就不會犯同樣的錯誤,爲未來需要支持不支持cookies的瀏覽器的項目進行URL重寫。

0

從我的角度來看,僅在優化瀏覽器獨立性(不包括通過GET的隱式會話)時,cookie已經是最佳解決方案。

用javascript重寫所有a.href以將會話散列添加爲參數。

這不應該是你的解決方案,如果你去真正的瀏覽器獨立,因爲餅乾比JavaScript支持更廣泛。 較大的數據塊可以存儲在LocalStorage中。

sessionStorage.setItem("key", "value"); 

var key_value = sessionStorage.getItem("key"); 

易於設置和相當快較大的客戶端的會話數據。但是您仍然需要通過POST/GET AJAX調用將一些數據發送到服務器,以實際跟蹤服務器端的會話。

餅乾應該是朋友,而不是敵人。