Session 簡單介紹
Session 的用途:
session 可以和 Redis 或者數據庫等結合做持久化操作,當服務器掛掉時也不會導致某些客戶信息(購物車) 丟失。
Session 的工作流程
express-session 的使用:
cnpm install express-session --save
var session = require("express-session");
app.use(session({
secret: 'keyboard cat',
resave: true, saveUninitialized: true
}))
設置值 req.session.username = "張三";
獲取值 req.session.username
app.use(session({
secret: '12345',
name: 'name',
cookie: {maxAge: 60000},
resave: false,
saveUninitialized: true
}));
參數
|
作用
|
secret
|
一個 String 類型的字符串,作爲服務器端生成 session 的簽名。
|
name
|
返回客戶端的 key 的名稱,默認爲 connect.sid,也可以自己設置。
|
resave
|
強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。 don't save session if unmodified
|
saveUninitialized
|
強制將未初始化的 session 存儲。當新建了一個 session 且未設定屬性或值時,它就處於
|
未初始化狀態。在設定一個 cookie 前,這對於登陸驗證,減輕服務端存儲壓力,權限控制是有幫助的。(默 認:true)。建議手動添加。
|
|
cookie
|
設置返回到前端 key 的屬性,默認值爲{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
|
rolling
|
在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)
|
req.session.destroy(function(err) { /*銷燬 session*/ })
req.session.username='張三'; //設置 session
req.session.username //獲取 session
req.session.cookie.maxAge=0; //重新設置 cookie 的過期時間
1.需要安裝express-session 和 connect-mongo模塊
2.引入模塊
var session = require("express-session");
const MongoStore = require('connect-mongo')(session);
3.配置中間件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
rolling:true,
cookie:{
maxAge:100000
},
store: new MongoStore({
url: 'mongodb://127.0.0.1:27017/student',
touchAfter: 24 * 3600 // time period in seconds
})
}))
Cookie 和 Session 區別
/*
* 1.安裝 express-session
cnpm install express-session --save
*
*
* 2.引入
var session = require("express-session");
3.設置官方文檔提供的中間件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
4.使用
設置值
req.session.username = "張三";
獲取值 req.session.username
* */
var express = require("express");
var app = express();
var session = require("express-session");
//配置中間件
app.use(session({
secret: 'this is string key', // 可以隨便寫。 一個 String 類型的字符串,作爲服務器端生成 session 的簽名
name:'session_id',/*保存在本地cookie的一個名字 默認connect.sid 可以不設置*/
resave: false, /*強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。*/
saveUninitialized: true, //強制將未初始化的 session 存儲。 默認值是true 建議設置成true
cookie: {
maxAge:5000 /*過期時間*/
}, /*secure https這樣的情況纔可以訪問cookie*/
//設置過期時間比如是30分鐘,只要遊覽頁面,30分鐘沒有操作的話在過期
rolling:true //在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)
}))
app.get("/",function(req,res){
//獲取sesssion
if(req.session.userinfo){ /*獲取*/
res.send('你好'+req.session.userinfo+'歡迎回來');
}else{
res.send('未登錄');
}
});
app.get("/login",function(req,res){
req.session.userinfo='張三222';
res.send('登錄成功');
});
app.get("/news",function(req,res){
//獲取sesssion
if(req.session.userinfo){ /*獲取*/
res.send('你好'+req.session.userinfo+'歡迎回來 news');
}else{
res.send('未登錄 news');
}
});
app.listen(3000);
/*
* 1.安裝 express-session
cnpm install express-session --save
*
*
* 2.引入
var session = require("express-session");
3.設置官方文檔提供的中間件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
4.使用
設置值
req.session.username = "張三";
獲取值 req.session.username
* */
var express = require("express");
var app = express();
var session = require("express-session");
//配置中間件
app.use(session({
secret: 'this is string key', // 可以隨便寫。 一個 String 類型的字符串,作爲服務器端生成 session 的簽名
name:'session_id',/*保存在本地cookie的一個名字 默認connect.sid 可以不設置*/
resave: false, /*強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。*/
saveUninitialized: true, //強制將未初始化的 session 存儲。 默認值是true 建議設置成true
cookie: {
maxAge:1000*30*60 /*過期時間*/
}, /*secure https這樣的情況纔可以訪問cookie*/
//設置過期時間比如是30分鐘,只要遊覽頁面,30分鐘沒有操作的話在過期
rolling:true //在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)
}))
app.get("/",function(req,res){
//獲取sesssion
if(req.session.userinfo){ /*獲取*/
res.send('你好'+req.session.userinfo+'歡迎回來');
}else{
res.send('未登錄');
}
});
app.get("/login",function(req,res){
req.session.userinfo='張三222';
res.send('登錄成功');
});
app.get("/loginOut",function(req,res){
//req.session.cookie.maxAge=0; /*改變cookie的過期時間*/
//銷燬
req.session.destroy(function(err){
console.log(err);
})
res.send('退出登錄成功');
});
app.get("/news",function(req,res){
//獲取sesssion
if(req.session.userinfo){ /*獲取*/
res.send('你好'+req.session.userinfo+'歡迎回來 news');
}else{
res.send('未登錄 news');
}
});
app.listen(3000);
/*
* 1.需要安裝 express-session 和 connect-mongo 模塊
cnpm install express-session --save
cnpm install connect-mongo --save
2.引入
var session = require("express-session");
var MongoStore = require("connect-mongo")(session);
3.設置官方文檔提供的中間件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
store:new MongoStore({
url: 'mongodb://127.0.0.1:27017/student',數據庫的地址
touchAfter: 24 * 3600 time period in seconds
})
}))
4.使用
設置值
req.session.username = "張三";
獲取值 req.session.username
* */
var express = require("express");
var app = express();
var session = require("express-session");
var MongoStore = require("connect-mongo")(session);
//配置中間件
app.use(session({
secret: 'this is string key', // 可以隨便寫。 一個 String 類型的字符串,作爲服務器端生成 session 的簽名
name:'session_id',/*保存在本地cookie的一個名字 默認connect.sid 可以不設置*/
resave: false, /*強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。*/
saveUninitialized: true, //強制將未初始化的 session 存儲。 默認值是true 建議設置成true
cookie: {
maxAge:1000*30*60 /*過期時間*/
}, /*secure https這樣的情況纔可以訪問cookie*/
rolling:true,//在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)
store:new MongoStore({
url: 'mongodb://127.0.0.1:27017/shop', //數據庫的地址
touchAfter: 24 * 3600 //time period in seconds 通過這樣做,設置touchAfter:24 * 3600,您在24小時內只更新一次會話,不管有多少請求(除了在會話數據上更改某些內容的除外)
})
}))
app.get("/",function(req,res){
//獲取sesssion
if(req.session.userinfo){ /*獲取*/
res.send('你好'+req.session.userinfo+'歡迎回來');
}else{
res.send('未登錄');
}
});
app.get("/login",function(req,res){
req.session.userinfo='張三222';
res.send('登錄成功');
});
app.get("/loginOut",function(req,res){
//req.session.cookie.maxAge=0; /*改變cookie的過期時間*/
//銷燬
req.session.destroy(function(err){
console.log(err);
})
res.send('退出登錄成功');
});
app.get("/news",function(req,res){
//獲取sesssion
if(req.session.userinfo){ /*獲取*/
res.send('你好'+req.session.userinfo+'歡迎回來 news');
}else{
res.send('未登錄 news');
}
});
app.listen(3000);