国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java會話(session)管理

2019-11-15 00:58:31
字體:
來源:轉載
供稿:網友
java會話(session)管理會話概述什么是會話

簡單的理解:用戶打開瀏覽器,點擊多個超鏈接,訪問Web服務器上多個資源,然后關閉瀏覽器,整個過程稱之為一次會話。

需要解決的問題

每個用戶在使用瀏覽器與服務器會話的過程中,會產生一些用戶數據,如用戶登陸標記,WEB應用程序必須要為每個用戶在一次或多次會話過程中保存這些數據。

兩種技術
  • CookieCookie是客戶端技術,WEB應用程序把每個用戶數據以Cookie的形式發送給各自的的瀏覽器,當用戶使用瀏覽器再次訪問WEB應用時,就會帶上這些Cookie,這樣,WEB應用可以為每個用戶分別處理各自的數據了。
  • HttpSession簡稱Session,是服務器端技術,服務器在運行時為每個用戶的瀏覽器創建一個其獨享的HttpSession對象。由于用戶各自獨享session,所以可以把各自的數據存放在各自的session域中,當用戶去訪問當前web應用其他web資源時,其他web資源再從用戶各自的session中取出數據為其服務。

    Cookie類

    1、javax.servlet.http.CookieCookie的屬性:

  • name:必須的,Cookie名

  • value:必須的,Cookie名對應的數據
  • comment:可選,備注
  • path:默認值就是產生Cookie的Servlet對應的URI

有一個cookie它的路徑是:/app/servlet/當瀏覽器訪問的新資源的路徑是:/app/1.jsp問?瀏覽器會將該cookie帶給1.jsp嗎?不會

當瀏覽器訪問的新資源的路徑是:/app/servlet/a/b/ServletDemo1問?瀏覽器會將該cookie帶給ServletDemo1嗎?會總結:在訪問一個資源時,帶不帶已有的cookie。訪問的資源路徑.startsWith(cookie的path),如果為true,則會帶

如果把一個Cookie的path設置成了/app/,說明訪問/app/下面的任何資源,都會帶cookie過去。

  • domain:默認就是產生Cookie的Servlet所在的網站域名

    加入cookie的domain是www.baidu.com訪問http://www.163.com帶不帶?不帶

  • maxAge:標識cookie的生命周期。默認是一次會話

要想在客戶端的緩存中保存住Cookie的數據,增大它的存活時間。單位是秒如果取值為0,就是要刪除之。

  • version:可選,Cookie的版本

2、服務器向客戶端寫Cookieresponse.addCookie(Cookie cookie);對應設置響應頭的“Set-Cookie”

3、獲取客戶端提交過來的CookieCookie[] cookies = request.getCookies();接著遍歷cookies數組確定所需的Cookie

4、如何唯一確定一個Cookie(有同名Cookie情況)通過domain+path+name,可以確定唯一一個Cookie

5、其他

  • 一個WEB站點可以給一個WEB瀏覽器發送多個Cookie,一個WEB瀏覽器可以存儲多個WEB站點提供的Cookie
  • 瀏覽器一般只允許存放300個cookies,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB
  • 如果創建一個Cookie,并發送到瀏覽器,默認情況是一個會話級別的cookie,即只存在瀏覽器的內存中。若需要存儲在磁盤上則需要設置maxAge屬性為大于0的數值,單位為秒。為0則是告訴瀏覽器刪除該cookie。
  • 刪除cookie時,path必須一致,否則刪除不成功
HttpSession類

javax.servlet.http.HttpSession HttpSession技術實際上還是利用Cookie技術

1、獲得HttpSession對象:
HttpSession session = request.getSession();

每一個HttpSession對象都有一個唯一的ID為了標識每一個客戶端,實際上向客戶端寫了一個特殊的Cookie:

  • 該Cookie的name為固定的“JSESSIONID”
  • 該Cookie的value為HttpSession對象的id
  • 該Cookie的path為當前應用路徑

request.getSession()方法詳解:

  • 如果用戶帶著一個名稱叫做JSESSIONID的Cookie過來了,先按照ID到服務器內存中找對應的HttpSession對象,
  • 沒找到或者瀏覽器沒有帶,則創建一個新的HttpSession對象,亦即有了新的ID,同時寫給客戶端JSESSION=sessionid;
  • 如果找到了,返回該HttpSession對象,繼續為用戶服務。

request.getSession(boolean b):如果b為true,作用等同于request.getSession()。 如果b為false,作用只是獲取。找不到則返回null。

session.invalidate():立刻摧毀服務器中的HttpSession對象。

2、HttpSession本身是一個域對象

void setAttribute(String name,Object obj) 設置屬性void removeAttribute(String name) 移除屬性Object getAttribute(String name) 獲取屬性

3、HttpSession生命周期

3.1 客戶端向服務器第一次發送請求的時候,request中并無sessionID.3.2 此時server端會創建一個session對象,并分配一個sessionID,serssion對象會保存在服務器端。此時session的狀態處于new state狀態,如果調用session.isNew(),則返回true3.3 當服務器段處理完畢后,將此sessionID,以Cookie的形式傳到客戶段。3.4 當客戶段再次發送請求時,會將sessionID 同request參數一起發送,傳遞給服務器端。3.5 服務器端可以根據傳遞過來的sessionID將這次請求(request)與保存在服務器端的session對象聯系起來,此時的session已不處于new state狀態,如果調用session.isNew(),則返回false.3.6 循環3-5 ,直到session超時或被銷毀。

4、HttpSession對象的狀態轉換

HttpSession對象默認超時為30分鐘。4.1 更改HttpSession的默認超時時間:在web.xml中配置

123
<session-config>  <session-timeout>1</session-timeout><!--單位為1分鐘--></session-config>

4.2 HttpSession對象狀態


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙自县| 苍南县| 古交市| 杨浦区| 石门县| 郑州市| 望城县| 洪雅县| 芒康县| 邵武市| 大埔区| 游戏| 山丹县| 洪江市| 永年县| 淮阳县| 武威市| 五大连池市| 鄂州市| 麻栗坡县| 额尔古纳市| 历史| 天水市| 黎城县| 叶城县| 安国市| 丰台区| 噶尔县| 海宁市| 弥渡县| 冷水江市| 临海市| 巴塘县| 于都县| 论坛| 溧水县| 衡水市| 健康| 于田县| 横山县| 定边县|