鍍金池/ 問答/Android  HTML/ 關(guān)于express-session 的一個(gè)問題

關(guān)于express-session 的一個(gè)問題

express-session 中的resave 的屬性的作用是什么呢官方文檔這樣直譯過來


:強(qiáng)制session保存到session store中。即使在請(qǐng)求中這個(gè)session沒有被修改。但是這個(gè)并不一定是必須的,如果客戶端有

     兩個(gè)并行的請(qǐng)求到你的客戶端,一個(gè)請(qǐng)求對(duì)session的修改可能被另外一個(gè)請(qǐng)求覆蓋掉,即使第二個(gè)請(qǐng)求并沒有修改sesion。 
     默認(rèn)是true,但是默認(rèn)值已經(jīng)過時(shí),因此以后default可能會(huì)被修改。因此好好研究你的需求選擇一個(gè)最適用的。大多數(shù)情況下你可能需要false 
    最好的知道你的store是否需要設(shè)置resave的方法是通過查看你的store是否實(shí)現(xiàn)了touch方法(刪除那些空閑的session。同時(shí)這個(gè)方法也會(huì)通知session store指定的session          是活動(dòng)態(tài)的),如果實(shí)現(xiàn)了那么你可以用resave:false,如果沒有實(shí)現(xiàn)touch方法,同時(shí)你的store對(duì)保存的session設(shè)置了一個(gè)過期的時(shí)間,那么建議你用resave:true 



我的理解是 某個(gè)客戶端有兩個(gè)請(qǐng)求,第一個(gè)請(qǐng)求修改了session第二個(gè)沒有修改,會(huì)將第一個(gè)修改的session覆蓋掉從而結(jié)果就是沒有修改session

回答
編輯回答
掛念你

并發(fā)請(qǐng)求會(huì)導(dǎo)致的session不一致,因?yàn)樵O(shè)置了resave選項(xiàng)為true后(默認(rèn)為true),默認(rèn)在你每次調(diào)用res.send方法發(fā)送響應(yīng)的時(shí)候會(huì)執(zhí)行一次req.session.save,所以不管這兩個(gè)請(qǐng)求修沒修改session,最后默認(rèn)存儲(chǔ)session的store里的值會(huì)是最后執(zhí)行res.send方法也就是響應(yīng)最慢的那個(gè)請(qǐng)求中session最后的值。

參考鏈接

2017年1月9日 12:38