首頁  >  文章  >  Java  >  jsp/servlet會話是什麼

jsp/servlet會話是什麼

(*-*)浩
(*-*)浩原創
2019-05-15 14:44:472635瀏覽

客戶端開啟與伺服器的連接,發出請求直到伺服器回應客戶端請求的整個過程稱之為會話 。 

推薦課程:Java教學

jsp/servlet會話是什麼

瀏覽器與伺服器之間的通訊是透過HTTP協定進行通訊的,而HTTP協定是」無狀態」的協議,它不能保存客戶的訊息,即一次回應完成之後連接就斷開了,下一次的請求需要重新連接,當用戶在同一網站的多個頁面之間轉換時,根本無法確定是否是同一個客戶,會話追蹤技術就可以實現這種要求。 

Cookie

伺服器在回應請求時可以將一些資料以"鍵-值"對的形式透過回應訊息保存在用戶端。當瀏覽器再次存取相同的應用程式時,會將原先的存有session ID的Cookie透過請求資訊帶到伺服器端,網頁伺服器透過識別唯一的session ID來代表每個客戶端,從而識別這個客戶端接下來的請求。

 Cookie不是內建對象,需要自行建立Cookie的實例。是伺服器往客戶端寫的一段文字訊息,該訊息是可以修改的,所以一般情況cookie會儲存一些非敏感訊息,當客戶端再次要求伺服器的時候,會將Cookie以請求頭的方式傳送到伺服器,這時候伺服器就能區分是誰在訪問了。

用於會話追蹤的Cookie叫做會話Cookie。 Servlet規格中會話追蹤的cookie名字必須是JSESSIONID,保存在瀏覽器的記憶體中。

Cookie可以用來維持使用者的會話狀態,但Cookie資訊保存在客戶端,有較大的安全隱患,且一般瀏覽器對Cookie的數目及資料大小有嚴格的限制。在Web應用程式中,一般情況下透過HttpSession物件保持會話狀態

Cookie cookie = new Cookie("键", "值");       //创建cookie
cookie.setMaxAge(60*60*24);                 //设置cookie的有效期
cookie.setPath("/");                        //设置cookie的有效范围(路径)
response.addCookie(cookie);                 //将cookie写入到客户端

Session

Session 是存放在伺服器端的,更安全。每個使用者都有一個不同的session,各個使用者之間是不能共享的。 

Session是依賴Cookie的,如果Cookie被停用,那麼session也會失效 。

Session技術則是服務端的解決方案,它是透過伺服器來保持狀態的。在Java中是透過呼叫HttpServletRequest的getSession方法(使用true作為參數)來建立的。在創建了Session的同時,伺服器會為該Session產生唯一的Session id,而這個Session id在隨後的請求中會被用來重新獲得已經創建的Session;在Session被創建之後,就可以調用Session相關的方法在Session中增加內容了,而這些內容只會保存在伺服器中,發到客戶端的只有Session id;當客戶端再次發送請求的時候,會將這個Session id帶上,伺服器接受到請求之後就會依據Session id找到對應的Session,從而再次使用。正式這樣一個過程,用戶的狀態也就得以維持了。

session.setAttribute(String name,Object obj);       //往session中存放内容(通过键和值的形式)
session.getAtrribute(String name);                  //通过键从session中获取内容
session.removeAttribute(String name);               //把存储在session中的对象移除
session.invalidate();                               //销毁session

隱藏表單域

隱藏表單域是將會話ID加入到HTML的隱藏表單中(類型為hidden的input)。重定向和轉發

透過進行訊息的傳遞 。透過表單形式提交到伺服器,但是本身不顯示。

例如第二個表單中取得第一個表單中的內容,並以隱藏域( 文字方塊type為hidden) 的方式接受第一個表單中的內容,再次傳遞到第三個表單中。通俗點說請求的順序是這樣的:表單- - > 表單二- - >表單三,但是表單三需要用到表單一提交的內容,所以就會需要表單二作為過渡,把錶單一的內容以隱藏域的形式儲存,然後再傳遞到表單三。

重寫URL

把會話ID編碼在網址中。例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980這樣,即使瀏覽器不支援cookie,也能夠實現會話追蹤。

對於URL複寫,伺服器從請求的URI中提取出會話ID,並把該請求與對應的會話關聯起來,然後在存取會話資料的時候,JSP頁面所進行的處理方式就和使用cookie追蹤會話id時所使用的方式完全相同。所以sesssion的實現要依賴cookie或URL複寫技術。

String sessionId = request.getRequestedSessionId();     //获得sessionId

透過response物件的encodeURL(StringURL)實作URL地值重寫:

<a 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參數及其值。

以上是jsp/servlet會話是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn