真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

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

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

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

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

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

設(shè)置如下:

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

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

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

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

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

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

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

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

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

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

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

以上答案已經(jīng)很詳細(xì)了,簡單來說,就是增加登錄難度,防止惡意登錄注冊。

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

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

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

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

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

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

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

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

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

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

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

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

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

1、登陸淘寶后,一段時間未刷新網(wǎng)頁,會自動退出

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

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

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

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

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

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

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

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


本文題目:express-session如何設(shè)置session
網(wǎng)頁路徑:http://weahome.cn/article/ihdisc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部