欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入解析Session工作原理及運行流程

 更新時間:2020年07月27日 11:04:04   作者:小青年て  
這篇文章主要介紹了深入解析Session工作原理及運行流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、session的概念及特點

  session概念:在計算機中,尤其是在網(wǎng)絡(luò)應(yīng)用中,稱為“會話控制”。Session 對象存儲特定用戶會話所需的屬性及配置信息。說白了session就是一種可以維持服務(wù)器端的數(shù)據(jù)存儲技術(shù)。session主要有以下的這些特點:

session保存的位置是在服務(wù)端

session一般來說要配合cookie使用,如果用戶瀏覽器禁用了cookie,那么只能使用URL重寫來實現(xiàn)session的存儲功能

單純的使用session來存儲用戶回話信息,那么當用戶量較多時,session文件數(shù)量會很多,會存在session查詢慢的問題

本質(zhì)上:session技術(shù)就是一種基于后端有別于數(shù)據(jù)庫的臨時存儲技術(shù)

二、為什么要使用session

  我們目前使用的互聯(lián)網(wǎng)應(yīng)用層協(xié)議基本上都是基于 HTTP 和 HTTPS 的,它們的本身是無狀態(tài)的, 只負責請求和響應(yīng)。 我告訴服務(wù)器我需要什么,服務(wù)器返回給我相應(yīng)的資源。 如果沒有額外處理的話, 服務(wù)器是不知道你是誰,更無法根據(jù)你是誰給你展現(xiàn)和你相關(guān)的內(nèi)容了。

HTTP 協(xié)議一開始被設(shè)計成這樣還是有一些歷史原因的,當時的互聯(lián)網(wǎng)多用于學術(shù)交流,只用于文章信息的展現(xiàn)之類的事情,遠沒有現(xiàn)在這么豐富多彩。所以在當時的背景下 HTTP 協(xié)議被設(shè)計成這樣其實也是很符合它的場景的。但隨著互聯(lián)網(wǎng)應(yīng)用越來越廣泛,應(yīng)用的形式也變得越來越多,我們的 Web 應(yīng)用不只限于提供簡單的信息展現(xiàn)了,還需要用戶能夠登錄,可以在論壇發(fā)帖子,在購物網(wǎng)站買東西等等。 這就需要 HTTP 協(xié)議能夠記錄用戶的狀態(tài)。也就是我們現(xiàn)在熟悉的 Session 由來。

三、session的工作原理

  • 用戶第一次請求服務(wù)器時,服務(wù)器端會生成一個sessionid
  • 服務(wù)器端將生成的sessionid返回給客戶端,通過set-cookie
  • 客戶端收到sessionid會將它保存在cookie中,當客戶端再次訪問服務(wù)端時會帶上這個sessionid
  • 當服務(wù)端再次接收到來自客戶端的請求時,會先去檢查是否存在sessionid,不存在就新建一個sessionid重復(fù)1,2的流程,如果存在就去遍歷服務(wù)端的session文件,找到與這個sessionid相對應(yīng)的文件,文件中的鍵值便是sessionid,值為當前用戶的一些信息
  • 此后的請求都會交換這個 Session ID,進行有狀態(tài)的會話。

四、session與cookies區(qū)別

1、數(shù)據(jù)存放位置不同:

cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。e79fa5e98193e4b893e5b19e31333366306536

2、安全程度不同:

cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,考慮到安全應(yīng)當使用session。

3、性能使用程度不同:

session會在一定時間內(nèi)保存在服務(wù)器上。當訪問增多,會比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當使用cookie。

4、數(shù)據(jù)存儲大小不同:

單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie,而session則存儲與服務(wù)端,瀏覽器對其沒有限制。

5、會話機制不同

session會話機制:session會話機制是一種服務(wù)器端機制,它使用類似于哈希表(可能還有哈希表)的結(jié)構(gòu)來保存信息。

cookies會話機制:cookie是服務(wù)器存儲在本地計算機上的小塊文本,并隨每個請求發(fā)送到同一服務(wù)器。 Web服務(wù)器使用HTTP標頭將cookie發(fā)送到客戶端。在客戶端終端,瀏覽器解析cookie并將其保存為本地文件,該文件自動將來自同一服務(wù)器的任何請求綁定到這些cookie。

五、session的生命周期

Session何時生效:

Sessinon在用戶訪問第一次訪問服務(wù)器時創(chuàng)建,需要注意只有訪問JSP、Servlet等程序時才會創(chuàng)建Session,只訪問HTML、IMAGE等靜態(tài)資源并不會創(chuàng)建Session,可調(diào)用request.getSession(true)強制生成Session。

Session何時失效:

1.服務(wù)器會把長時間沒有活動的Session從服務(wù)器內(nèi)存中清除,此時Session便失效。Tomcat中Session的默認失效時間為20分鐘。從session不活動的時候開始計算,如果session一直活動,session就總不會過期。從該Session未被訪問,開始計時; 一旦Session被訪問,計時清0;

2.調(diào)用Session的invalidate方法

HttpSession session = request.getSession();
session.invalidate();//注銷該request的所有session

3.設(shè)置session的失效時間

a)web.xml中

<session-config>
<session-timeout>30</session-timeout>
</session-config>

b)在程序中手動設(shè)置

session.setMaxInactiveInterval(30 * 60);//設(shè)置單位為秒,設(shè)置為-1永不過期

request.getSession().setMaxInactiveInterval(-1);//永不過期

c)tomcat也可以修改session過期時間,在server.xml中定義context時采用如下定義:

<Context path="/livsorder"
docBase="/home/httpd/html/livsorder"   defaultSessionTimeOut="3600"
isWARExpanded="true"   
isWARValidated="false" isInvokerEnabled="true"   isWorkDirPersistent="false"/>

4.關(guān)閉瀏覽器,session就會失效

六、session的性能瓶頸

  另外一個要聊聊的就是 Session 數(shù)據(jù)的存儲。 通常情況下,如果你不明確的設(shè)置, 大多數(shù) Web 框架會把 Session 數(shù)據(jù)存放到內(nèi)存中。如果你的 Web 應(yīng)用用戶量不大的話,這也不成問題。 但如果你的用戶數(shù)比較大的話,就可能發(fā)生一個事情 — 內(nèi)存不夠用了。

這很正常,內(nèi)存容量是非常寶貴的,假設(shè)每個用戶的 Session 數(shù)據(jù)是 100K, 1萬個用戶就會大概占用 1G 的存儲空間,如果你的 Session 數(shù)據(jù)清理機制也恰巧比較慢的話,內(nèi)存非常容易被占滿。這就需要你在設(shè)計比較大并發(fā)量的站點時,要考慮 Session 的存儲方式,比如把它們保存到硬盤文件系統(tǒng)中,或者數(shù)據(jù)庫中。 所以你在開發(fā)一個 Web 應(yīng)用的時候,如果你的用戶量很大,你需要有這個意識。另外 Session 放到內(nèi)存中還有一個弊端,如果你的 Web 服務(wù)器發(fā)生重啟,那么所有的 Session 狀態(tài)都會被情況,會在一定程度上影響用戶體驗。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入學習JavaWeb中監(jiān)聽器(Listener)的使用方法

    深入學習JavaWeb中監(jiān)聽器(Listener)的使用方法

    這篇文章主要為大家詳細介紹了深入學習JavaWeb中監(jiān)聽器(Listener)的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • SpringBoot常用注解詳細整理

    SpringBoot常用注解詳細整理

    大家好,本篇文章主要講的是SpringBoot常用注解詳細整理,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 關(guān)于Idea創(chuàng)建Java項目并引入lombok包的問題(lombok.jar包免費下載)

    關(guān)于Idea創(chuàng)建Java項目并引入lombok包的問題(lombok.jar包免費下載)

    很多朋友遇到當idea創(chuàng)建java項目時,命名安裝了lombok插件卻不能使用注解,原因有兩個大家可以參考下本文,本文對每種原因分析給出了解決方案,需要的朋友參考下吧
    2021-06-06
  • java中functional interface的分類和使用詳解

    java中functional interface的分類和使用詳解

    這篇文章主要介紹了java中functional interface的分類和使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Micronaut框架的簡單使用介紹

    Micronaut框架的簡單使用介紹

    這篇文章主要介紹了Micronaut框架的簡單使用介紹,幫助大家更好的理解和學習使用Micronaut,感興趣的朋友可以了解下
    2021-04-04
  • Java異常處理之try...catch...語句的使用進階

    Java異常處理之try...catch...語句的使用進階

    這篇文章主要介紹了Java異常處理之try...catch...語句的使用進階,重點在于牽扯相關(guān)IO使用時的資源調(diào)配情況,需要的朋友可以參考下
    2015-11-11
  • springboot?maven?plugin報紅的解決辦法

    springboot?maven?plugin報紅的解決辦法

    本文主要介紹了springboot?maven?plugin報紅的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • LeetCode程序員面試題之遞歸乘法

    LeetCode程序員面試題之遞歸乘法

    在Java中,遞歸乘法是一種簡單而有效的方法,可以用來計算兩個數(shù)字的乘積。它的基本思想是:如果第一個數(shù)字是0,則乘積為0;如果第一個數(shù)字是1,則乘積為第二個數(shù)字;其他情況,則通過將第一個數(shù)字減1,并將第二個數(shù)字與自身相乘,來實現(xiàn)遞歸乘法。
    2023-02-02
  • spring boot集成pagehelper(兩種方式)

    spring boot集成pagehelper(兩種方式)

    這篇文章主要介紹了spring boot集成pagehelper(兩種方式),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • java分布式緩存方案

    java分布式緩存方案

    本文簡單介紹了緩存的種類,緩存常見的問題,對大家的學習和工作有一定的參考價值,需要的小伙伴可以參考一下
    2021-08-08

最新評論