cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie安全性低,别人可以分析存放在本地的cookie,session相对安全性高。
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用cookie。
一、什么是session
session是另一种记录客户状态的机制,不同于cookie的是cookie保存在客户端浏览器中,而session保存在服务器上。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session,客户端浏览器再次访问时只需要从session中查找该客户的状态就可以了。
session相当于程序在服务器上建立一份客户档案,客户来访时只需要查询客户档案表。
二、cookie和session两者的区别
如果说cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
建议:将登陆信息等重要信息存放为session、其他信息如果需要保留,可以放在cookie里。
三、express中的session
跟cookie一样都需要单独的安装和引用模块。安装模块:
$sudo npm install express-session
主要的方法就是session(options),其中options中包含可选参数,主要有:
name: 设置 cookie 中,保存 session 的字段名称,默认为 connect.sid 。
store: session 的存储方式,默认存放在内存中,也可以使用 redis,mongodb 等。express 生态中都有相应模块的支持。
secret: 通过设置的 secret 字符串,来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改。
cookie: 设置存放 session id 的 cookie 的相关选项,默认为 (default: { path: '/', httpOnly: true, secure: false, maxAge: null })
genid: 产生一个新的 session_id 时,所使用的函数, 默认使用 uid2 这个 npm 包。
rolling: 每个请求都重新设置一个 cookie,默认为 false。
resave: 即使 session 没有被修改,也保存 session 值,默认为 true。
示例:
var express = require('express');
var session = require('express-session');
var app = express();
app.use(session({
secret:'dt test', //secret的值建议使用随机字符串
cookie:{maxAge:60*1000*30} // 过期时间(毫秒
}));
app.get('/',function(req,res) {
if(req.session.sign) {//检查用户是否已经登录
console.log(req.session);//打印session的值
res.send('欢迎你再次登录');
}else {
req.session.sign = true;
req.session.name = 'niefengjun';
res.send('欢迎登陆!');
}
});
app.listen(80);