服务器session文件什么时候销毁,node中session存储与销毁,及session的生命周期
1、首先在使用session之前需要先配置session的過期時間等,在入口文件app.js中
app.use(express.session({
cookie: {
maxAge: config.get("secret.maxAge") //這里就是設置了session的過期時間,配置文件中是120000,即20分鐘。
},
secret: config.get("secret.sessionSecret"),
store: new RedisStore({
host: config.get("session_server").ip,
port: config.get("session_server").port,
prefix: config.get("session_server").prefix
//,db:'mydb' //此屬性可選。redis可以進行分庫操作。若無此參數,則不進行分庫
})
}));
}
2、在現在做的系統中,登陸請求成功之后,服務器存儲了一個session,代碼
req.session.username = user.userName;//存儲的是一個用戶名
3、用戶登陸之后的操作在路由的攔截器里面校驗session,校驗成功之后為此session增加20分鐘的過期時間。
exports.checkTBLogin = function(req, cb) {
if(req.session && req.session.loginTB){
console.log("req.session.---------------"+req.session.loginTB);
console.log(' req.session.cookie.expires============'+ req.session.cookie.expires);
req.session.cookie.expires= new Date(Date.now() + 20 * 60 * 1000);
return cb(null);
}else{
return cb(null, "login");
}
return cb(null, "login");
};
4、用戶點擊退出的額時候,銷毀session
req.session.destroy();
5、考慮到網站安全的問題,用戶做任何操作的時候都要驗證session。session的生命周期決定這種方式也不是絕對安全的,
假如用戶已經登錄了,攻擊者截取到了用戶發送到服務器的請求,用請求里的sessionid,去做其他操作,只要被截取的用戶在線,服務器上這個session沒有過期,那操作都能成功。
6、session的生命周期
當一個Session開始時,Servlet容器會創建一個HttpSession對象,那么在HttpSession對象中,可以存放用戶狀態的信息。
Servlet容器為HttpSession對象分配一個唯一標識符即Sessionid,Servlet容器把Sessionid作為一種Cookie保存在客戶端的?*瀏覽器* 中。
用戶每次發出Http請求時,Servlet容器會從HttpServletRequest對象中取出Sessionid,然后根據這個Sessionid找到相應的HttpSession對象,從而獲取用戶的狀態信息。
我們知道Session是存在于服務器端的,當把瀏覽器關閉時,瀏覽器并沒有向服務器發送
任何請求來關閉Session,自然Session也不會被銷毀,但是可以做一點努力,在所有的
客戶端頁面里使用js的window.onclose來監視瀏覽器的關閉動作,然后向服務器發送一
個請求來關閉Session,但是這種做法在實際的開發中也是不推薦使用的,最正常的辦法
就是不去管它,讓它等到默認的時間后,自動銷毀。
那么為什么當我們關閉瀏覽器后,就再也訪問不到之前的session了呢?
其實之前的Session一直都在服務器端,而當我們關閉瀏覽器時,此時的Cookie是存在
于瀏覽器的進程中的,當瀏覽器關閉時,Cookie也就不存在了。
其實Cookie有兩種:
一種是存在于瀏覽器的進程中;
一種是存在于硬盤上
而session的Cookie是存在于瀏覽器的進程中,那么這種Cookie我們稱為會話Cookie,
當我們重新打開瀏覽器窗口時,之前的Cookie中存放的Sessionid已經不存在了,此時
服務器從HttpServletRequest對象中沒有檢查到sessionid,服務器會再發送一個新的存
有Sessionid的Cookie到客戶端的瀏覽器中,此時對應的是一個新的會話,而服務器上
原先的session等到它的默認時間到之后,便會自動銷毀。
當在同一個瀏覽器中同時打開多個標簽,發送同一個請求或不同的請求,仍是同一個session;
當不在同一個窗口中打開相同的瀏覽器時,發送請求,仍是同一個session;
當使用不同的瀏覽器時,發送請求,即使發送相同的請求,是不同的session;
當把當前某個瀏覽器的窗口全關閉,再打開,發起相同的請求時,就是本文所闡述的,是不同的session,但是它和session的生命周期是沒有關系的.
【學習筆記】Spring中的BeanFactory和ApplicationContext 以及 Bean的生命周期(Y2-3-2)
BeanFactory和ApplicationContext Spring的IoC容器就是一個實現了BeanFactory接口的可實例化類. Spring提供了兩種不同的容器: 一種是最基本的Bean ...
Unity3d中MonoBehavior默認函數的執行順序和生命周期
Awake()在MonoBehavior創建后就立刻調用,在腳本實例的整個生命周期中,Awake函數僅執行一次:如果游戲對象(即gameObject)的初始狀態為關閉狀態,那么運行程序,Awake函數 ...
java之hibernate之session中對象的生命周期
1. session是用來執行對象的crud操作,并且session是對象事務工廠.session是線程級別的,所以生命周期比較短. 2.session中對象的生命周期圖: 3.session中對象的 ...
vue生命周期圖示中英文版Vue實例生命周期鉤子
vue生命周期圖示中英文版Vue實例生命周期鉤子知乎上近日有人發起了一個 “react 是不是比 vue 牛皮,為什么?” 的問題,Vue.js 作者尤雨溪12月4日正面回應了該問題.以下是尤雨溪回復 ...
12、生命周期-@Bean指定初始化和銷毀方法
12.生命周期-@Bean指定初始化和銷毀方法 Bean的生命周期:創建->初始化->銷毀 容器管理bean的生命周期 我們可以自定義初始方法和銷毀方法,容器在bean進行到當期那生命周期 ...
Flutter--Flutter中Widget、App的生命周期
前言 在App的開發過程中,我們通常都需要了解App以及各個頁面的生命周期,方便我們在App進入前臺時啟動一些任務,在進入后臺后暫停一些任務.同時,各個頁面的生命周期也很重要,每個頁面消失時要做一些內 ...
ionic中關于ionicView 的生命周期
當我們來回切換頁面時候,視圖被緩存下來,不用每次再去new一個新的視圖,可以大大地提高性能.當跳出一個視圖后,視圖的元素被保存在DOM中,它的作用域也就不在$watch的作用域內,當我們訪問一個已經被 ...
Java對象在JVM中的生命周期
當你通過new語句創建一個java對象時,JVM就會為這個對象分配一塊內存空間,只要這個對象被引用變量引用了,那么這個對象就會一直駐留在內存中,否則,它就會結束生命周期,JVM會在合適的時 ...
Netty中ChannelHandler的生命周期
在使用Netty進行網絡編程的時候,通常需要在網絡連接的不同階段進行相應的操作,比如在連接建立時,客戶端向服務端發起認證,在接收到數據時對數據內容進行解析等等.那么,連接的不同階段在netty中如何表 ...
隨機推薦
FZU 2090 旅行社的煩惱 floyd 求無向圖最小環
題目鏈接:旅行社的煩惱 題意是求無向圖的最小環,如果有的話,輸出個數,并且輸出權值. 剛剛補了一發floyd 動態規劃原理,用了滑動數組的思想.所以,這個題就是floyd思想的變形.在k從1到n的過程 ...
Android ScrollView 不能滾動但是有滾動條
如果一切都檢查完畢,沒有任何設置為不能滾動,而且outouch事件也沒有被攔截的話,那么在布局文件中檢查下是否在ScrollView中的子View中設置了margin_top屬性.如果設置了,那么Sc ...
maven中pom.xml
1. GroupID是項目組織唯一的標識符,實際對應JAVA的包的結構,是main目錄里java的目錄結構. ArtifactID就是項目的唯一的標識符,實際對應項目的名稱,就是項目根目錄的名稱.一般 ...
C#注冊表
C#注冊表情緣 ? 記得當時剛接觸C#的時候,喜歡編寫各種小軟件,而注冊表系列和網絡系列被當時的我認為大牛的必備技能.直到我研究注冊表前一天我都感覺他是那么的高深. 今天正好有空,于是就研究了下注冊表 ...
數細胞-swust oj
數細胞(0964) 一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數.編程需要用到的隊列及其相關函數已經實現,你只需要完 ...
Spring 源碼學習(4)—— bean的加載part 1
前面隨筆中,結束了對配置文件的解析工作,以及將配置文件轉換成對應的BeanDefinition存儲在容器中.接下來就該進行bean的加載了. public Object getBean(String ...
SharpGL學習筆記(十) 常見的光源類型,創建光源
在OpenGL中,使用光源的特性組合,如顏色,位置,方向等等,可以創建多種不同類型的燈光. 常見的幾種燈光類型有: 定向光源(directonal) 定位光源(positional) 衰減光源 聚光燈 ...
ssh 上傳文件以及文件夾到linux服務器
閑來無事分享一篇,幫助到你的話,麻煩給老弟點個關注.經常會分享一些實用技能. 回歸正題,現在服務器linux很多.是不是不會傳文件?別急 下面就是方法: 一.上傳文件到linux服務器 首先從你本地切 ...
在windows上搭建redis集群(redis-cluster)(轉載)
一 所需軟件:Redis.Ruby語言運行環境.Redis的Ruby驅動redis-xxxx.gem.創建Redis集群的工具redis-trib.rb 二 安裝配置redis? redis下載地址 ...
總結
以上是生活随笔為你收集整理的服务器session文件什么时候销毁,node中session存储与销毁,及session的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java学习路线以及方法推荐
- 下一篇: IEEE与APA引用格式