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

深入解析Session工作原理及運(yùn)行流程

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

一、session的概念及特點(diǎn)

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

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

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

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

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

二、為什么要使用session

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

HTTP 協(xié)議一開始被設(shè)計(jì)成這樣還是有一些歷史原因的,當(dāng)時(shí)的互聯(lián)網(wǎng)多用于學(xué)術(shù)交流,只用于文章信息的展現(xiàn)之類的事情,遠(yuǎn)沒有現(xiàn)在這么豐富多彩。所以在當(dāng)時(shí)的背景下 HTTP 協(xié)議被設(shè)計(jì)成這樣其實(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的工作原理

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

四、session與cookies區(qū)別

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

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

2、安全程度不同:

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

3、性能使用程度不同:

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

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

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

5、會(huì)話機(jī)制不同

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

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

五、session的生命周期

Session何時(shí)生效:

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

Session何時(shí)失效:

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

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

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

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

a)web.xml中

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

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

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

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

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

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

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

六、session的性能瓶頸

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

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

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

相關(guān)文章

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

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

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

    SpringBoot常用注解詳細(xì)整理

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

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

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

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

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

    Micronaut框架的簡單使用介紹

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

    Java異常處理之try...catch...語句的使用進(jìn)階

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

    springboot?maven?plugin報(bào)紅的解決辦法

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

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

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

    spring boot集成pagehelper(兩種方式)

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

    java分布式緩存方案

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

最新評(píng)論