溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Session的基礎(chǔ)是什么

發(fā)布時(shí)間:2021-10-14 16:33:33 來(lái)源:億速云 閱讀:152 作者:柒染 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)Session的基礎(chǔ)是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

  由于Cookie有一很大的局限,于是Session出現(xiàn)了

  Session的作用就是在服務(wù)器端保存一些用戶的數(shù)據(jù),然后傳遞給用戶一個(gè)名字為JSESSIONID的Cookie,所以本質(zhì)上它也是一個(gè)Cookie,這個(gè)JESSIONID對(duì)應(yīng)這個(gè)服務(wù)器中的一個(gè)Session對(duì)象,通過(guò)它就可以獲取到保存用戶信息的Session。

Session是什么

  首先Session是jsp中九大內(nèi)置對(duì)象之一

  其次Session是一個(gè)域?qū)ο?/p>

  然后Session是在服務(wù)器端用來(lái)保存用戶數(shù)據(jù)的一種技術(shù)。并且Session會(huì)話技術(shù)是基于Cookie實(shí)現(xiàn)的。

Session的創(chuàng)建和獲取

  Session的創(chuàng)建時(shí)機(jī)是在request.getSession()方法第一次被調(diào)用時(shí)。

  補(bǔ)充:request.getSession()之后的調(diào)用都是獲取已經(jīng)創(chuàng)建了的Session對(duì)象,單例模式

  Session被創(chuàng)建后,同時(shí)還會(huì)有一個(gè)名為JSESSIONID的Cookie被創(chuàng)建。

  這個(gè)Cookie的默認(rèn)時(shí)效就是當(dāng)前會(huì)話。

Session的工作原理

  Session被創(chuàng)建后,對(duì)應(yīng)的Cookie被保存到瀏覽器中,之后瀏覽器每次訪問(wèn)項(xiàng)目時(shí)都會(huì)攜帶該Cookie。

  當(dāng)我們?cè)俅握{(diào)用時(shí)會(huì)根據(jù)該JSESSIONID獲取已經(jīng)存在的Cookie,而不是再創(chuàng)建一個(gè)新的Cookie。

  如果Cookie中有JSESSIONID,但是JSESSIONID沒(méi)有對(duì)應(yīng)的Session存在,則會(huì)重新創(chuàng)建一個(gè)HttpSession對(duì)象,并重新設(shè)置JSESSIONID。

Session數(shù)據(jù)的存取

  setAttribute設(shè)置屬性

  getAttribute獲取屬性

  Session的作用域是當(dāng)前會(huì)話,即對(duì)應(yīng)的一個(gè)瀏覽器客戶端,一個(gè)瀏覽器一個(gè)session對(duì)象非一個(gè)網(wǎng)頁(yè)

Session的有效時(shí)間

  Session對(duì)象在服務(wù)器端不能長(zhǎng)期保存,它是有時(shí)間限制的,超過(guò)一定時(shí)間沒(méi)有被訪問(wèn)過(guò)的Session對(duì)象就應(yīng)該釋放掉,以節(jié)約內(nèi)存。Session的計(jì)時(shí)是從最后一次被訪問(wèn)開(kāi)始計(jì)時(shí),統(tǒng)計(jì)其“空閑”的時(shí)間。

  說(shuō)明:Session對(duì)象默認(rèn)的最長(zhǎng)有效時(shí)間為30分鐘。在tomcat的conf目錄下web.xml配置文件中

  設(shè)置

  我們?cè)趙eb.xml文件中配置的Session會(huì)話超時(shí)時(shí)間是對(duì)所有Session都生效的。

  setMaxInactiveInterval(intseconds)設(shè)置用戶多長(zhǎng)時(shí)間沒(méi)有操作之后就會(huì)Session過(guò)期。以秒為單位。

  如果是正數(shù)。表示用戶在給定的時(shí)間內(nèi)沒(méi)有任意操作,Session會(huì)話就會(huì)過(guò)期。

  如果是非正數(shù)(零&負(fù)數(shù))。表示Session永不過(guò)期。

  intgetMaxInactiveInterval()獲取超時(shí)時(shí)間。以秒為單位。

  invalidate()強(qiáng)制失效

Session的活化和鈍化

  Session鈍化:Session在一段時(shí)間內(nèi)沒(méi)有被使用或關(guān)閉服務(wù)器時(shí),會(huì)將當(dāng)前存在的Session對(duì)象及Session對(duì)象中的數(shù)據(jù)序列化到磁盤的過(guò)程,稱之為鈍化。

  Session活化:Session被鈍化后,服務(wù)器再次調(diào)用Session對(duì)象或重啟服務(wù)器時(shí),將Session對(duì)象及Session對(duì)象中的數(shù)據(jù)從磁盤反序列化到內(nèi)存的過(guò)程,稱之為活化。

  如果希望Session作用域中的對(duì)象也能夠隨Session鈍化過(guò)程一起序列化到磁盤上,則對(duì)象的實(shí)現(xiàn)類也必須實(shí)現(xiàn)java.io.Serializable接口。不僅如此,如果對(duì)象中還包含其他對(duì)象的引用,則被關(guān)聯(lián)的對(duì)象也必須支持序列化。

以上就是Session的基礎(chǔ)是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI