session
session是什么
session是因为cookie的弊端(存放在客户端,容易被客户修改伪造,数据量大也有纯传输问题) 才被做出来的,用session存储在服务器中,这让他的安全性也相对高一点
session是一次浏览器和服务器的交互的会话,session也是一种存储方案
服务器建立一个session,会在客户端建立一个唯一的识别(目的是为了只有这个客户端才能获得这个session
session的标识也会根据浏览器有关系 不同的浏览器的同一用户是不同的标识
session 的运作通过一个 session_id
来进行。session_id
通常是存放在客户端的 cookie 中。客户端通过 session_id 就能跟服务器上的session数据联系起来进行数据的保存和修改。
session 可以存放在
内存 cookie本身 redis 或 memcached 等缓存中 数据库中
存在缓存的方案比较常见,因为存数据库中要经过磁盘读取查询的效率远低于缓存中
node.js中的session
需要安装express-session的包对应的路径下命令行引入
npm install express-session
引入包
session = require("express-session");
express = require("express");
app = express();
session的属性:
name:设置在cookie中,session的字段名称 ,默认为 connect.sid
。
secret:用来计算hash(哈希值)并且放在客户端中的cookie中
cookie:设置存放 session id 的 cookie 的相关选项
store: session 的存储方式,默认存放在内存中,也可以使用 redis,mongodb 等。express 生态中都有相应模块的支持。
genid: 产生一个新的 session_id 时, 默认使用 uid2
这个 npm 包来生产。
rolling:每个请求都重新设置一个 cookie,默认为 false。
resave:如果为true即使 session 没有被修改,也保存 session 值,默认为 true。
默认的内容
cookie: {
path: '/',
httpOnly: true,
secure: false,
maxAge: null
}
配置session
app.use(
session({
//服务器中保存的唯一用户的信息
secret: "zfpx",//设置签名秘钥 内容可以任意填写
saveUninitialized: false,//如果原先没有session那么就设置,否则不设置
resave: false,//不强制保存,如果session没有被修改不重新保存 如果为true就是相反的
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 30 },//cookie的有效时间 时间过了session和相应的cookie都失效
})
);