關於瀏覽器禁用cook URL重寫

(1)html

session老是放在服務器上的,每一個客戶會跟一個sessionID對應。由於HTTP是無鏈接的,如何區分同一個客戶的屢次請求呢,就須要客戶端每次發請求的時候,發送相應的sessionID。
一般狀況下,sessionID在客戶端以cookie的形式保存。若是瀏覽器靜止了cookie,客戶端再向服務器發請求的時候,就不會發送sessionID,所以服務器就會將這個請求做爲一個新客戶,因此就會出現session值丟失的假象。
這時候出現一個問題,若是客戶瀏覽器不支持cookie,怎麼辦?J2EE提供的另外一個辦法就是URL重寫,寫超連接的時侯,老是用response.encodeURL(url),鏈接就會變成*.jsp?sessionID=......,完成了原來用cookie完成的功能。
J2EE建議,不論客戶瀏覽器是否支持cookie,服務器端編程都建議使用URL重寫。
web

(2)編程

web上用的都是非鏈接的網絡協議
session 是存在服務器上的
每一個session有一個惟一的session ID(爲了標識他是那個客戶端的)
瀏覽器

在啓動session的同時,會在客戶端生成cookie,服務器把session ID加到cookie中
每次服務器和客戶端交互的時候,就是從cookie中取得session ID 來定位服務器上的session
服務器

這樣只要你的cookie不過時,服務器上有你的session,就不會出問題
cookie

(3)網絡

JSP實如今瀏覽器關閉cookies狀況下的會話管理session

一般,會話管理是經過服務器將 Session ID 做爲一個 cookie 存儲在用戶的 Web 瀏覽器中來惟一標識每一個用戶會話。若是瀏覽器不支持 cookies,或者將瀏覽器設置爲不接受 cookies,咱們能夠經過 URL 重寫來實現會話管理。jsp

  實質上 URL 重寫是經過向 URL 鏈接添加參數,並把 session ID 做爲值包含在鏈接中。然而,爲使這生效,你須要爲你的 servlet 響應部分的每一個鏈接添加 session ID 。編碼

   把 session ID 加到一個鏈接可使用一對方法來簡化:response.encodeURL() 使 URL 包含 session ID,若是你須要使用重定向,可使用 response.encodeRedirectURL () 來對 URL 進行編碼。

  encodeURL () 及 encodeRedirectedURL () 方法首先判斷 cookies 是否被瀏覽器支持;若是支持,則參數 URL 被原樣返回,session ID 將經過 cookies 來維持。

  來看下面的例子,兩個 JSP 文件:hello1.jsp 和 hello2.jsp,及它們之間的影響。咱們在 hello1.jsp 中簡單的建立一個會話,並在 session 中存儲一個對象實例。接着用戶能夠點擊頁面的鏈接到達 hello2.jsp。在 hello2.jsp 中,咱們從 session 中獲取原先放置的對象並顯示它的內容。注意,咱們在 hello1.jsp 中調用了 encodeURL() 方法來得到 hello2.jsp 的連接,使得在瀏覽器停用 cookies 的狀況下,session ID 自動添加到 URL,hello2.jsp 仍能獲得 session 對象。

  首先在啓用 cookies 的狀況下運行。而後關閉對 cookie 的支持,重啓瀏覽器,再運行一次。每次你均可以看到會話管理在起做用,並能在頁之間傳遞信息。

注意,若是你想讓這個例子能在關閉了 cookies 的瀏覽器中工做,你的 JSP 引擎必須支持 URL 重寫。


hello1.jsp




hello2.jsp

hello2.jsp



<%
Integer i= (Integer)session.getValue("num");
out.println("Num value in session is "+i.intValue());

文章引用自:http://macrochen.blogdriver.com/macrochen/543381.html

相關文章
相關標籤/搜索