cookie和seesion的区别
1.cookie的数据是保存在浏览器的,session保存在服务器上
2.cookie不是很安全,别人可以分析存在本地的cookie并进行cookie欺骗,考虑到安全,应该使用session
3.session会在一定时间内,保存在服务器上,当请求个数过多的时候,会占用较多的服务器性能
4.单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点做多保存20个cookie
session的介绍
session的运作通过一个session_id来进行。session_id通常保存在cookie中,比如express中,默认的字段是connect.sid,当请求到来的时候,服务端检查cookie是否携带这个session_id,并且通过这个session_id与服务端的sessin data关联起来,进行数据的修改和保存
意思就是:当你浏览网页的时候,服务器会随机产生一个标志然后存在cookie中,然后当浏览器发送请求的时候,cookie会携带这个标志,然后浏览区就知道你上次访问的内容,并且从服务器中取出你上次的记录。
session可以存放在:
1.内存中
2.cookie本身
3.数据库中
4.redis或memcached中
express操作session需要引入中间件express-session
session的属性:
- name:设置cookie,保存session的名称,默认是connect.aid
- store:session的存储方式,默认是内存中,也可以设置在redis等
- secret:使其产生signedCookie防止篡改
- cookie设置存放session_id的cookie比如path,httpOnly等这些cookie的属性
- rolling:每个请求重新设置一个cookie,刷新过期时间
- resave:即使session没有别修改,也保存session的值默认是true
撸代码
cnpm i express-session --save
//引入session
let session = require('express-session');
app.use(session({
secret:'123',//秘钥
resave:false,
saveUninitialized:true
})) //配置中间件
session多用于登录验证这方面
/*
* seesion 保存在服务器上
* cookie保存在浏览器上
* */
const express = require('express');
let session = require('express-session');
let app= express();
/*
* 配置session
* */
app.use(session({
secret:'123',//秘钥
resave:false,
saveUninitialized:true,
name:'kaidi',//给本地cookie设置一个值
cookie:{maxAge:30000},//里面设置cookie的一些属性
rolling:true //重置cookie的过期时间,默认是false
}))
//配置路由
app.get('/',function (req,res) {
//欢迎权哥大驾光临
if(req.session.user){
res.send('欢迎权哥大驾光临')
}else{
res.send('你没有登录')
}
})
app.get('/login',function (req,res) {
//登录进来设置一个session
req.session.user = 'liquan'; //设置一个session
res.send('登陆成功')
})
app.get('/nologin',function (req,res) {
if(req.session.user){
res.send('你是安全')
}else{
res.send('你进行违规操作,封号成功');
}
})
//如果强制删除session
app.get('/rmlogin',function (req,res) {
req.session.cookie.maxAge = -1;//强制设置过期时间
res.send('你被封号了')
})
app.listen(3000,function () {
console.log('server is running');
})