1.Session和cookie概念
Session
session是将用户名,密码,存储在服务器中的以session-id为名的文件中。将session-id文件名返回给客户端,客户端将session-id存储在cookie;再次访问的时候,携带session-id进行访问,session-id=令牌;
cookie
cookie是存储在本地,请求成功之后,服务器会返回一个令牌,令牌就被存储到cookie中,如果浏览器的cookie功能被禁止掉,整个cookie就不能使用了,也就是说就不可以保存账号和密码了。
session和cookie区别?
cookie是把数据存储在客户端的;
session是把数据存储在服务器的,使用session更加安全
2.Session和cookie在Express中的使用
在express这个框架中,默认不支持Session和Cookie,但是我们可以使用第三方中间件:express-session
和cookie-parser
来解决。
配置使用express-session
插件
npm install express-session
配置:
//首先引入session中间件
var session = require('express-session')
//配置
app.use(session({
secret: 'keyboard cat',//配置加密字符串,“keyboard cat”可以改成你想改的字符串
resave: false,
saveUninitialized: true,//默认为true表示无论是否使用session,我都默认为你分配一把钥匙
}))
//使用:
//在路由里面添加session数据
app.get('/',(req,res)=>{
//一般把用户信息都可以存到session里面,user是包含用户名密码等的对象
req.session.user=user
})
//在另一个路由里面获取session数据
app.get('/index',(req,res)=>{
req.session.user
})
小提示:默认session数据是内存存储的,服务器一旦重启就会丢失,
真正的生产环境会把session进行持久化存储
用处:比如做后台管理系统的时候,界面用户未登录前显示状态未登录,登录过后跳转到页面的时候显示已登录:xxx 可以这样实现
当前登录用户:{{ user.nickname }}
实现页面登陆前只显示登录、注册,登陆后只显示个人主页,设置,退出
{{if user}}
当前登录用户:{{ user.nickname }}
<a href='##'>个人主页</a>
<a href='##'>设置</a>
<a href='##'>退出</a>
{{else}}
<a href='##'>登录</a>
<a href='##'>注册</a>
{{/if}}
配置使用cookie-parser
插件
npm install cookie-parser
配置和使用:
//配置:
var express = require('express')
var cookieParser = require('cookie-parser')
var app = express()
//调用cookie-parser
app.use(cookieParser())
//使用:
//设置cookie
app.get('/', function (req, res) {
res.cookie('id',result[0].id,{maxAge:604800000})
res.cookie('admin',result[0].admin,{maxAge:604800000})
res.cookie('password',result[0].password,{maxAge:604800000}
})
//获取cookie
app.get('/', function (req, res) {
res.cookies
})
设置cookie时的参数
res.cookie('key','value',option)
option是对象,里面可以写这些参数:{
domain: 域名 【不用设置】
expires: 指定时间cookie失效 【不用设置】
maxAge: 多长时间之后失效(毫秒)
secure: 是否在https和http中生效 【不用设置】
path: 在哪个路径可以使用cookie 【不用设置】
httpOnly:可防止 XSS 攻击产生
signed: 对cookie加密
}