express-session如何設(shè)置session

小編給大家分享一下express-session如何設(shè)置session,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)提供高防主機(jī)、云服務(wù)器、香港服務(wù)器、成都電信服務(wù)器托管

用express web開(kāi)發(fā)框架開(kāi)發(fā)網(wǎng)站時(shí),關(guān)于session的設(shè)置大致可以分為兩種情況,一種是只要用戶通過(guò)瀏覽器訪問(wèn)網(wǎng)站就會(huì)生成session,第二種是只有用戶登錄的情況下才能生成session。

第一種的案例網(wǎng)站比較多,比方百度、淘寶、360等等,咱們來(lái)看一下百度首頁(yè):

express-session如何設(shè)置session

我首先清除了瀏覽器的所有cookie,然后訪問(wèn)百度首頁(yè),在未登錄情況下,瀏覽器依然存儲(chǔ)了cookie。

用express開(kāi)發(fā)網(wǎng)站設(shè)置session需要用到一個(gè)npm安裝包,express-session,用這個(gè)包,就可以設(shè)置網(wǎng)站的session,在使用express-session時(shí)需要設(shè)置一個(gè)參數(shù)來(lái)配置session是否需要初始化。這個(gè)參數(shù)的名字比較長(zhǎng):saveUninitialized

設(shè)置如下:

express-session如何設(shè)置session

saveUninitialized默認(rèn)值為true,但是必須顯性的設(shè)置一下,不然express-session會(huì)報(bào)一個(gè)警告:

express-session如何設(shè)置session

當(dāng)設(shè)置為ture時(shí),用戶不論是否登錄網(wǎng)站,只要訪問(wèn)網(wǎng)站都會(huì)生成一個(gè)session,只不過(guò)這個(gè)session是一個(gè)空的session,存儲(chǔ)結(jié)構(gòu)為:

express-session如何設(shè)置session

sessionid作為一個(gè)標(biāo)識(shí)由后端設(shè)置set-cookie響應(yīng)頭的方式,告訴瀏覽器用cookie存儲(chǔ)此sessionid,看一下百度的響應(yīng)頭:

express-session如何設(shè)置session

那這種未登錄就需要設(shè)置session的配置方式和只有登錄情況下設(shè)置session的方式有什么不同呢?

前一種方式是為了方便設(shè)置驗(yàn)證機(jī)制,不知道大家上網(wǎng)有沒(méi)有碰到過(guò)輸入驗(yàn)證碼的情況,咱們還用百度來(lái)舉個(gè)栗子(終于找到了百度存在的另外一個(gè)意義)。

在講解案例之前,首先咱來(lái)思考一下,網(wǎng)站登錄為什么需要輸入驗(yàn)證碼呢?  

驗(yàn)證碼一般是防止有人利用機(jī)器人自動(dòng)批量注冊(cè)、對(duì)特定的注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸、灌水。因?yàn)轵?yàn)證碼是一個(gè)混合了數(shù)字或符號(hào)的圖片,人眼看起來(lái)都費(fèi)勁,機(jī)器識(shí)別起來(lái)就更困難。像百度貼吧未登錄發(fā)貼要輸入驗(yàn)證碼大概是防止大規(guī)模匿名回帖的發(fā)生。 一般注冊(cè)用戶ID的地方以及各大論壇都要要輸入驗(yàn)證碼。

以上答案已經(jīng)很詳細(xì)了,簡(jiǎn)單來(lái)說(shuō),就是增加登錄難度,防止惡意登錄注冊(cè)。

那驗(yàn)證碼的原理是啥呢?這里就需要用到session技術(shù)了。分如下幾步來(lái)說(shuō)明session技術(shù)配合實(shí)現(xiàn)驗(yàn)證碼機(jī)制:

第一步,用戶訪問(wèn)網(wǎng)站(未登錄),生成空的session,通過(guò)cookie記錄sessionid

第二步,用戶跳轉(zhuǎn)到登錄頁(yè)面:

express-session如何設(shè)置session

這個(gè)頁(yè)面會(huì)向后端發(fā)送一個(gè)請(qǐng)求,這個(gè)請(qǐng)求可能是ajax發(fā)送的也可能是點(diǎn)擊登錄后渲染頁(yè)面時(shí)一起發(fā)送到的,不論哪種方式,此時(shí)后端服務(wù)器,會(huì)根據(jù)此時(shí)用戶的cookie中記錄的sessionid找到前面生成的空session,生成一個(gè)驗(yàn)證碼,存儲(chǔ)結(jié)構(gòu)如下:

express-session如何設(shè)置session

第三步,用戶填寫完用戶信息,點(diǎn)擊提交,表單信息包括 {驗(yàn)證碼:“大王”} 會(huì)被發(fā)送到服務(wù)器,服務(wù)器首先根據(jù)用戶請(qǐng)求中用戶的cookie中的sessionid,找到設(shè)置的驗(yàn)證碼,和前端發(fā)送的驗(yàn)證碼進(jìn)行比對(duì),若一致,則繼續(xù)進(jìn)行賬號(hào)密碼驗(yàn)證登錄,若不一致則返回錯(cuò)誤,從這里也可以看出,驗(yàn)證碼機(jī)制可以單獨(dú)抽離成一個(gè)微服務(wù)。

第四步,驗(yàn)證碼驗(yàn)證通過(guò),驗(yàn)證登錄,將用戶信息存入session,用戶變?yōu)榈卿洜顟B(tài)。此時(shí)session存儲(chǔ)結(jié)構(gòu)為:

express-session如何設(shè)置session

關(guān)于第二種情況,只有登錄情況下設(shè)置session,一般用于內(nèi)部OA系統(tǒng),不需要驗(yàn)證碼機(jī)制,不需要這么麻煩。

express-session中的另外一個(gè)十分有用的參數(shù)是rolling,這個(gè)參數(shù)又是干什么用的呢?

簡(jiǎn)單在這里解釋一下,解釋之前首先咱們思考一個(gè)場(chǎng)景,比方說(shuō)我上午登錄的淘寶,中午下班我去吃飯了,中午回來(lái)之后刷新網(wǎng)頁(yè),登錄顯示超時(shí),需要重新登錄。但是假如我比較敬業(yè)中午不吃飯了,一直在刷淘寶,午飯時(shí)間已經(jīng)過(guò)了,其他同事紛紛回來(lái)了,但是這時(shí)我的淘寶并沒(méi)有退出,一直是登錄狀態(tài),中間不需要重新登錄,這是為什么呢?

總結(jié)這個(gè)場(chǎng)景發(fā)現(xiàn)兩種情況:

1、登陸淘寶后,一段時(shí)間未刷新網(wǎng)頁(yè),會(huì)自動(dòng)退出

2、登陸淘寶后,一直在瀏覽淘寶信息,一直刷新,跳轉(zhuǎn)網(wǎng)頁(yè),就不會(huì)退出。

為什么會(huì)出現(xiàn)上面兩種情況呢?

相信有部分同學(xué)已經(jīng)猜到了,session設(shè)置一般有個(gè)過(guò)期時(shí)間,在express-session中是通過(guò)maxAge來(lái)設(shè)置。

時(shí)間到期之后,session會(huì)被自動(dòng)刪除,需要重新登錄,比方說(shuō)淘寶設(shè)置session保存1小時(shí),我從登錄開(kāi)始,一小時(shí)后,session會(huì)被刪除,但是現(xiàn)實(shí)是如果我一直在瀏覽淘寶的頁(yè)面,一小時(shí)后并不會(huì)刪除,而是一小時(shí)之內(nèi)我不去刷新淘寶頁(yè)面就會(huì)將session刪除。

為什么會(huì)這樣呢?這是因?yàn)?,session的計(jì)時(shí)設(shè)置是根據(jù):用戶最后一次請(qǐng)求開(kāi)始計(jì)算,這就需要用戶每次請(qǐng)求都需要修改session的保存時(shí)間。

那在express中如何設(shè)置呢?將express-session的rolling的值設(shè)置為ture即可,這個(gè)值默認(rèn)為false,需要手動(dòng)開(kāi)啟,設(shè)置如圖:

express-session如何設(shè)置session

以上是“express-session如何設(shè)置session”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文名稱:express-session如何設(shè)置session
網(wǎng)頁(yè)網(wǎng)址:http://muchs.cn/article32/ihdisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站維護(hù)標(biāo)簽優(yōu)化、軟件開(kāi)發(fā)網(wǎng)站排名、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)