最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

二、為什么要使用session

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

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

三、session的工作原理

  • 用戶第一次請(qǐng)求服務(wù)器時(shí),服務(wù)器端會(huì)生成一個(gè)sessionid
  • 服務(wù)器端將生成的sessionid返回給客戶端,通過(guò)set-cookie
  • 客戶端收到sessionid會(huì)將它保存在cookie中,當(dāng)客戶端再次訪問(wèn)服務(wù)端時(shí)會(huì)帶上這個(gè)sessionid
  • 當(dāng)服務(wù)端再次接收到來(lái)自客戶端的請(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)訪問(wèn)增多,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用cookie。

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

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

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

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

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

五、session的生命周期

Session何時(shí)生效:

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

Session何時(shí)失效:

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

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

c)tomcat也可以修改session過(guò)期時(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)用用戶量不大的話,這也不成問(wèn)題。 但如果你的用戶數(shù)比較大的話,就可能發(fā)生一個(gè)事情 — 內(nèi)存不夠用了。

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

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

相關(guān)文章

  • 新手學(xué)習(xí)JQuery基本操作和使用案例解析

    新手學(xué)習(xí)JQuery基本操作和使用案例解析

    這篇文章主要介紹了新手學(xué)習(xí)JQuery基本操作和使用案例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Spring中@EnableScheduling實(shí)現(xiàn)定時(shí)任務(wù)代碼實(shí)例

    Spring中@EnableScheduling實(shí)現(xiàn)定時(shí)任務(wù)代碼實(shí)例

    這篇文章主要介紹了Spring中@EnableScheduling實(shí)現(xiàn)定時(shí)任務(wù)代碼實(shí)例,@EnableScheduling 注解開(kāi)啟定時(shí)任務(wù)功能,可以將多個(gè)方法寫(xiě)在一個(gè)類,也可以分多個(gè)類寫(xiě),當(dāng)然也可以將方法直接寫(xiě)在上面ScheddulConfig類中,需要的朋友可以參考下
    2024-01-01
  • Java帶返回值的方法的定義和調(diào)用詳解

    Java帶返回值的方法的定義和調(diào)用詳解

    在java中,方法就是用來(lái)完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過(guò)程中,會(huì)包含很多條語(yǔ)句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來(lái)探究一下帶返回值的方法的定義和調(diào)用
    2022-04-04
  • MyBatis?Plus實(shí)現(xiàn)中文排序的兩種有效方法

    MyBatis?Plus實(shí)現(xiàn)中文排序的兩種有效方法

    在MyBatis?Plus項(xiàng)目開(kāi)發(fā)中,針對(duì)中文數(shù)據(jù)的排序需求是一個(gè)常見(jiàn)的挑戰(zhàn),尤其是在需要按照拼音或特定語(yǔ)言邏輯排序時(shí),本文整合了兩種有效的方法,旨在幫助開(kāi)發(fā)者克服MyBatis?Plus在處理中文排序時(shí)遇到的障礙,需要的朋友可以參考下
    2024-08-08
  • 深入解析java中的值傳遞和引用傳遞

    深入解析java中的值傳遞和引用傳遞

    這篇文章主要介紹了深入解析java中的值傳遞和引用傳遞,值傳遞是將變量的值復(fù)制給另一個(gè)變量,兩個(gè)變量之間并沒(méi)有直接關(guān)系,引用傳遞是將變量的引用(內(nèi)存地址)傳遞給另一個(gè)變量,兩個(gè)變量之間指向同一個(gè)內(nèi)存地址,修改一個(gè)變量的值也會(huì)影響到另一個(gè)變量
    2023-07-07
  • spring-boot使用AOP統(tǒng)一處理日志

    spring-boot使用AOP統(tǒng)一處理日志

    這篇文章主要為大家詳細(xì)介紹了spring-boot使用AOP統(tǒng)一處理日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • MyBatis-Generator的配置說(shuō)明和使用

    MyBatis-Generator的配置說(shuō)明和使用

    本文主要介紹了MyBatis-Generator的配置說(shuō)明和使用的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • SpringBoot實(shí)現(xiàn)密碼安全存儲(chǔ)的五種方式小結(jié)

    SpringBoot實(shí)現(xiàn)密碼安全存儲(chǔ)的五種方式小結(jié)

    項(xiàng)目開(kāi)發(fā)中,密碼安全存儲(chǔ)是非常關(guān)鍵的一環(huán),作為開(kāi)發(fā)者,我們需要確保用戶的密碼在存儲(chǔ)時(shí)被安全地加密,避免因數(shù)據(jù)泄露而造成嚴(yán)重后果,所以本文給大家介紹了SpringBoot實(shí)現(xiàn)密碼安全存儲(chǔ)的5種方式,需要的朋友可以參考下
    2025-03-03
  • Java使用itext生成復(fù)雜數(shù)據(jù)的pdf的示例代碼

    Java使用itext生成復(fù)雜數(shù)據(jù)的pdf的示例代碼

    Apache iText 是一個(gè)開(kāi)源 Java 庫(kù),支持 PDF 文檔的開(kāi)發(fā)和轉(zhuǎn)換,在本教程中,我們將學(xué)習(xí)如何使用 iText 開(kāi)發(fā)可以創(chuàng)建、轉(zhuǎn)換和操作 PDF 文檔的 Java 程序,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-12-12
  • Java報(bào)錯(cuò)Non-terminating?decimal?expansion解決分析

    Java報(bào)錯(cuò)Non-terminating?decimal?expansion解決分析

    這篇文章主要為大家介紹了Java報(bào)錯(cuò)Non-terminating?decimal?expansion解決方案及原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論

元朗区| 临猗县| 云霄县| 大足县| 湘潭市| 抚远县| 尖扎县| 秭归县| 马公市| 湛江市| 建湖县| 天全县| 阿鲁科尔沁旗| 浦北县| 云龙县| 云和县| 武冈市| 平安县| 金塔县| 凉山| 霍城县| 盖州市| 达尔| 通海县| 堆龙德庆县| 金沙县| 托里县| 台江县| 呼玛县| 志丹县| 保康县| 定襄县| 平乐县| 兴安盟| 鲁甸县| 东辽县| 丹江口市| 中阳县| 中山市| 古交市| 武夷山市|