1. 程式人生 > >sessionid如何產生?由誰產生?儲存在哪裡?

sessionid如何產生?由誰產生?儲存在哪裡?

面試問道這個我居然不知道怎麼回答,當然也是因為我確實沒有研究過。下面就是百度了一篇文章後簡單回答這個問題。

sessionid是一個會話的key,瀏覽器第一次訪問伺服器會在伺服器端生成一個session,有一個sessionid和它對應。tomcat生成的sessionid叫做jsessionid。

session在訪問tomcat伺服器HttpServletRequest的getSession(true)的時候建立,tomcat的ManagerBase類提供建立sessionid的方法:隨機數+時間+jvmid

儲存在伺服器的記憶體中,tomcat的StandardManager類將session儲存在記憶體中

,也可以持久化到file,資料庫,memcache,redis等。客戶端只儲存sessionid到cookie中,而不會儲存session,session銷燬只能通過invalidate或超時,關掉瀏覽器並不會關閉session。

那麼Session在何時建立呢?當然還是在伺服器端程式執行的過程中建立的,不同語言實現的應用程式有不同建立Session的方法,而在Java中是通過呼叫HttpServletRequest的getSession方法(使用true作為引數)建立的。在建立了Session的同時,伺服器會為該Session生成唯一的Session id,而這個Session id在隨後的請求中會被用來重新獲得已經建立的Session;在Session被建立之後,就可以呼叫Session相關的方法往Session中增加內容了,而這些內容只會儲存在伺服器中,發到客戶端的只有Session id;當客戶端再次傳送請求的時候,會將這個Session id帶上,伺服器接受到請求之後就會依據Session id找到相應的Session,從而再次使用之。

建立:sessionid第一次產生是在直到某server端程式呼叫 HttpServletRequest.getSession(true)這樣的語句時才被建立。

刪除:超時;程式呼叫HttpSession.invalidate();程式關閉;

session存放在哪裡:伺服器端的記憶體中。不過session可以通過特殊的方式做持久化管理(memcache,redis)。

session的id是從哪裡來的,sessionID是如何使用的:當客戶端第一次請求session物件時候,伺服器會為客戶端建立一個session,並將通過特殊演算法算出一個session的ID,用來標識該session物件

session會因為瀏覽器的關閉而刪除嗎? 不會,session只會通過上面提到的方式去關閉。 下面是tomcat中session的建立:
ManagerBase是所有session管理工具類的基類,它是一個抽象類,所有具體實現session管理功能的類都要繼承這個類,該類有一個受保護的方法,該方法就是建立sessionId值的方法: (tomcat的session的id值生成的機制是一個隨機數加時間加上jvm的id值,jvm的id值會根據伺服器的硬體資訊計算得來,因此不同jvm的id值都是唯一的), StandardManager類是tomcat容器裡預設的session管理實現類, 它會將session的資訊儲存到web容器所在伺服器的記憶體裡。 PersistentManagerBase也是繼承ManagerBase類,它是所有持久化儲存session資訊的基類,PersistentManager繼承了PersistentManagerBase,但是這個類只是多了一個靜態變數和一個getName方法,目前看來意義不大,對於持久化儲存session,tomcat還提供了StoreBase的抽象類,它是所有持久化儲存session的基類,另外tomcat還給出了檔案儲存FileStore和資料儲存JDBCStore兩個實現。

相關推薦

sessionid 如何產生產生儲存哪裡?如何設定httpOnly屬性

背景 最近要掃描網站,提示網站漏洞,要給cookies加上httponly屬性。專案加到cookies裡的都加了後發現JSEESIONID這個居然不知道怎麼弄。 當然這是sessionid。 關於sessionid和cookies的含義內容、關係等暫時不討

sessionid如何產生產生儲存哪裡

面試問道這個我居然不知道怎麼回答,當然也是因為我確實沒有研究過。下面就是百度了一篇文章後簡單回答這個問題。 sessionid是一個會話的key,瀏覽器第一次訪問伺服器會在伺服器端生成一個session,有一個sessionid和它對應。tomcat生成的sessionid叫做jsessioni

Python是發明的,Python概述

學習 面向對象 其他 參考 這一 膠水 uid .html 特點 Python 本義是指 “蟒蛇”,1989年荷蘭人Guido van Rossum發明了一種面向對象的解釋型高級編程語言,將其命名為Python,Python設計哲學為優雅、明確、簡單,實際上Python始終

指標的大小到底是決定?是多少?(轉載至羽然的微博部落格)如果不能轉載,請聯絡刪掉

原文連結:http://blog.sina.com.cn/s/blog_4fd9844201010n3v.html 應該說這是一個非常基礎的問題,教科書上說指標大小和機器字長相同,即32位機指標長度為4位元組!但是對不對呢?為什麼是這樣?   搜了一下相關資料。。。居然發現回答不統一,很多人

人工智慧 主宰? (eZone 26.3.15)

人工智慧 由誰主宰? (eZone 26.3.15)人工智慧 由誰主宰?超級人工智慧機器/Skynet(Cyberdyne Systems Skynet / Global Digital Defense Network),當見到人類時就會認定他們對自己構成威脅,因而主動發動攻擊,誓要殲滅人類 ﹣這其實是由20

Flume遠端實時採集Windows產生的log4j產生的資料

一、配置log4j.properties 在IDEA的resource下面新建log4j.properties 配置如下:主要定義了控制檯和flume裡面的日誌格式,flumeAppender配置參考Flume官網 log4j.rootLogger=INFO,stdout,flum

activemq訊息儲存滿導致的伺服器崩潰

1.通過jstack 出來的執行緒有巨量的鎖死現象 "http://*:3050-8188" daemon prio=10 tid=0x00007fc597d60800 nid=0x9f03 waiting on condition [0x00007f

合並細線表格而產生的疑問與解答

代碼 外邊框 col code 就是 間距 容易 常見 lec 由合並細線表格而產生的疑問與解答 一、背景 學習CSS之前制作的表格邊框效果單一,且產生對於border屬性的疑問,私下查找資料、寫代碼舉例子,做總結。 二、深度理解table 中border 的定義 如下一個

自動記錄資料庫儲存過程的更新和改變,併產生日誌

一、        簡介 使用環境:SQL Server     在專案開發過程中,專案管理者通常都很希望對專案的開發進展有一個日誌的記錄。程式碼的記錄和管理可以通過TFS或者VSS等工

R語言實戰--隨機產生服從不同分佈函式的資料(正態分佈,泊松分佈等),並將資料寫入資料框儲存到硬碟

隨機產生服從不同分佈的資料 均勻分佈——runif() > x1=round(runif(100,min=80,max=100)) > x1 [1] 93 100 98 98 92 98 98 89 90 98 100 89

多執行緒記憶體溢位產生的實戰分析

一日凌晨,手機瘋狂報警,簡訊以摧枯拉朽之勢瞬間以百條的速度到達,我在睡夢中被驚醒,看到簡訊的部分內容如下: Caused by: java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thr

MATLAB實現均勻分佈產生正態分佈和銳利分佈

xaxis=-10:0.1:10; miu=0; delta=1; N=1000000; u1=rand(1,N); u2=rand(1,N); y1=(-2*log(u1)).^0.5;    y2=

Python3使用csv模組csv.writer().writerow()儲存csv檔案,產生空行的問題

問題:csv.writer().writerow()儲存的csv檔案,開啟時每行後都多一行空行 一開始的程式碼如下: def write_csv_file(path, head, data):     try:         with open(path, 'w')

讓APP工程師產生了泡沫?

這兩年移動網際網路比較火,移動APP的開發人員也是比較緊缺。 面試了一個做APP的,能力很一般,態度也比較傲慢。最後感覺肯定不會用這個人了,但是出於驗證自己想法的目的,還是很誠懇地以一個決定錄取他的態度,和他交談。 “剛才我問了你一些問題,可能比較偏,或者不是你所擅

js隨機產生x到y(例如:0-10)的隨機整數,儲存在陣列中

產生隨機數,是任何計算機語言必須有的基本功能; 因為我們的生活中充滿了各種隨機性; 所以程式設計過程中一定需要隨機某件事。 下面是用javascript 實現的隨機數,其中陣列元素重複的判斷Jquery 這個庫;(為什麼用Jquer

設計模式-生產者消費者模式 常見場景: 某個模組負責產生資料,這些資料另一個模組來負責處理。產生資料的模組,就形象地稱為生產者;而處理資料的模組,就稱為消費者。 該模式還需要有一個緩衝區處於生

常見場景: 某個模組負責產生資料,這些資料由另一個模組來負責處理。產生資料的模組,就形象地稱為生產者;而處理資料的模組,就稱為消費者。 該模式還需要有一個緩衝區處於生產者和消費者之間,作為一箇中介。生產者把資料放入緩衝區,而消費者從緩衝區取出資料 緩衝區作用 1. 解耦,生產者和消費者只依賴緩衝區,而不互

js-隨機產生一個10個元素組成的陣列

一.隨機產生一個由10個元素組成的一個數組。 第一步:建立一個隨機函式; 第二步:定義一個空陣列; 第三步:for迴圈遍歷,將隨機的每一個數新增在數組裡面。 上面的這一種方法,隨機產生的10個元素的陣列,其實是有重複的,下面的這種方法可以去重複。 二.隨機產生一個由10個

我是Java初學者:在Java中宣告物件時屬性拷貝而產生堆疊溢位錯誤的記錄

我在學習中發現當在執行這段程式碼時會出現堆疊溢位的錯誤; public class TestDemo {          public TestDemo testDemo = new TestDemo();          public TestDemo( ){    

CSS3動畫產生圓圈小變大向外擴散的效果

涉及到 CSS3 的動畫(animation)、2D 轉換(transform: scale),具體如程式碼所示。 <!DOCTYPE html> <html> <h

實驗二 第一題 模擬分頁式儲存管理中硬體的地址轉換和產生缺頁中斷

#include<iostream> #include<iomanip> using namespace std; struct yebiao {int sign; long zhucunkuaihao;long cipanweizhi; yeb