客戶端開啟與伺服器的連線,發出請求直到伺服器響應客戶端請求的全過程稱之為會話 。
瀏覽器與伺服器之間的通訊是通過http協議進行通訊的,而http協議是」無狀態」的協議,它不能儲存客戶的資訊,即一次響應完成之後連線就斷開了,下一次的請求需要重新連線,當使用者在同一**的多個頁面之間轉換時,根本無法確定是否是同乙個客戶,會話跟蹤技術就可以實現這種要求 。
1、通過cookie實現
2、通過session實現
3、url位址重寫
4、表單隱藏域
cookie不是內建物件,需要自己建立cookie的例項。是伺服器往客戶端寫的一段文字資訊,該資訊是可以修改的,所以一般情況cookie會儲存一些非敏感資訊,當客戶端再次請求伺服器的時候,會將cookie以請求頭的方式傳送到伺服器,這個時候伺服器就能區分是誰在訪問了。
cookie cookie = new cookie("鍵", "值"); //建立cookie
cookie.setmaxage(60*60*24); //設定cookie的有效期
cookie.setpath("/"); //設定cookie的有效範圍(路徑)
response.addcookie(cookie); //將cookie寫入到客戶端
session 是存放在伺服器端的,更加安全。每乙個使用者都有乙個不同的session,各個使用者之間是不能共享的。
伺服器端會建立乙個session物件,並且產生乙個sessionid來標識這個session物件,然後將這個sessionid放入到cookie中傳送到客戶端,下一次訪問時,sessionid會傳送到伺服器,在伺服器端通過這個sessionid進行不同的使用者識別 。
session是依賴cookie的,如果cookie被禁用,那麼session也將失效 。
session.setattribute(string name,object obj); //往session中存放內容(通過鍵和值的形式)
session.getatrribute(string name); //通過鍵從session中獲取內容
session.removeattribute(string name); //把儲存在session中的物件移除
session.invalidate(); //銷毀session
銷毀session
設定session有效期的三種方式:
tomcat->config->web.xml中設定30
的值
當前專案的web.xml中設定30
的值
通過**設定session.setmaxinactiveinterval(30);
會話超時管理
getlastaccessestime():返回客戶端最後一次與會話相關聯的請求時間
getmaxinactiveinterval():以秒為單位返回乙個會話內兩個請求最大的時間間隔
setmaxinactiveinterval():一秒為單位設定session的有效時間
session是基於cookie的 ,cookie 被禁用session就不會起作用。在cookie被禁用的時候就需要url位址重寫來解決這個問題了。
這個時候客戶端瀏覽器向伺服器發出請求時,會在url位址後面加上類似於「sessionid=*」形式的引數,伺服器端通過獲取sessionid關鍵字來獲取會話值來判斷是哪個使用者傳送的請求。
但是在程式第一次訪問伺服器端時,服務端並不能確認客戶端瀏覽器是否支援cookie。因此,當伺服器第一次發出請求時,服務端會預設採用url重寫,也就是將sessionid寫到url位址中傳遞。
之後當客戶端傳送請求後,伺服器會根據提交給客戶端瀏覽器的資訊自動檢查客戶端是否啟用了cookie,如果啟用,將不再進行url重寫。如果沒有,則繼續使用url重寫。
string sessionid = request.getrequestedsessionid(); //獲得sessionid
通過response物件的encodeurl(stringurl)實現url地值重寫:
href="<%=response.encodeurl("
index.jsp") %>">
index頁面a>
該方法會自動判斷客戶端是否支援cookie。如果客戶端支援cookie,會將url原封不動地輸出來。如果客戶端不支援cookie,則會呼叫encodeurl()方法之後會自動將使用者session的id重寫到url中。重寫後的輸出可能是這樣的:
a href="index.jsp?jsessionid=0e0c61100aeb06de6a95eb1cd1da8158">index頁面a>
httpservletresponse介面定義了兩個用於url重寫的方法:
encodeurl方法,用於超連結和form表單的action屬性中設定的url進行重寫
encoderedirecturl 方法 用於對傳遞給httpservletresponse.sendredirect()方法的url進行重寫
他們根據請求訊息中是否含有cookie頭字段來決定是否進行url重寫。把url作為引數傳遞給這兩個方法,他們就能完成url重寫,在url後面新增 jsessionid引數及其值。可以關閉瀏覽器的cookie,然後,進行實驗,在網頁原始檔中檢視url後面是否有jsessionid引數及其值。
通過進行資訊的傳遞 。通過表單形式提交到伺服器,但是本身不顯示。
比如第二個表單中獲取第乙個表單中的內容,並以隱藏域( 文字框type為 hidden) 的方式接受第乙個表單中的內容,再次傳遞到第三個表單中。通俗點說請求的順序是這樣的:表單一 - - > 表單二 - - >表單三,但是表單三需要用到表單一提交的內容,所以就會需要表單二作為過渡,把錶單一的內容以隱藏域的形式儲存,然後再傳遞到表單三中。
JSP四種會話跟蹤技術
cookie 伺服器在乙個應答首部傳遞給瀏覽器的名稱 值對。瀏覽器儲存的時間由 cookie 的過期時間屬性來指定。當瀏覽器向某個伺服器 傳送乙個請求時,它會檢查其儲存的 cookie 並在請求首部中包含從同一臺伺服器上接收到的所有 cookie。session tracking 在 瀏覽器和伺服器...
JSP四種會話跟蹤技術
cookie 伺服器在乙個應答首部傳遞給瀏覽器的名稱 值對。瀏覽器儲存的時間由cookie的過期時間屬性來指定。當瀏覽器向某個伺服器傳送乙個請求時,它會檢查其儲存的cookie,並在請求首部中包含從同一臺伺服器上接收到的所有cookie。session tracking 在瀏覽器和伺服器之間不直接傳...
JSP四種會話跟蹤技術
cookie 伺服器在乙個應答首部傳遞給瀏覽器的名稱 值對。瀏覽器儲存的時間由cookie的過期時間屬性來指定。當瀏覽器向某個伺服器傳送乙個請求時,它會檢查其儲存的cookie,並在請求首部中包含從同一臺伺服器上接收到的所有cookie。session tracking 在瀏覽器和伺服器之間不直接傳...