一,简介
session是另一种记录客户状态的机制,cookie保存在客户端,session保存在服务器
session运行在服务器,客户端第一次访问服务器时,就可以将客户的登录信息保存。
当客户访问其他界面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉可不会导致信息丢失(购物车)
当重新打开浏览器信息不保存
二,工作流程
当浏览器向服务器发送请求时,会在服务器建立一个session对象,相当于一个key,value的键值对,然后将key(cookie)f返回到客户端,当浏览器再次访问时,携带key(cookie)找到对应的session(value),客户的信息都存在session中。
用来实现sessionb,设置sessionid标识的方式一般有2种,URL重写和cookie
URL重写:“;sessionid=xxx”再次请求这个url的时候,jsessionid会被传到服务器
cookie:在服务器response返回的时候,会把sessionid放在http头部放在cookie属性里传到客户端
再次访问服务器的时候,sessionid会随着cookie一起请求
三,express-session的使用
(1)安装 npm i session
(2)引入var session=require("express-session")
(3)设置中间件
app.use(session({
secret:'this is a string key',//加密的字符串,里面内容可以随便写
resave:false,//强制保存session,即使它没变化
saveUninitialized:true //强制将未初始化的session存储,默认为true
}))
(4)使用
设置值 req.session.username=“lhj”
获取值 req.session.username
五,express-session的常用方法
六,负载均衡配置session,把session保存到数据库里面
(负载均衡:假如北京的一台计算机访问北京的一台服务器,处于登录状态时,又去访问北京的另一台服务器,为了不让数据丢失,就把session保存到数据库,用户的key(session的id)是一样的)
(1)安装 npm i connect-mongo/express-session
(2)引入 var session=require("expression-session")
var MongoStore=require("connect-mongo")(session)
(3)配置中间件
app.use(session({
secret:'this is a string key',//加密的字符串,里面内容可以随便写
resave:false,//强制保存session,即使它没变化
saveUninitialized:true //强制将未初始化的session存储,默认为true
store:new MongoStore({
url:'mongodb://127.0.0.1:27017/orderShop',
touchAfter:24*3600
})
}))
七,cookie和session 的区别
ps:cookie相当于通行证,session相当于身份明细表
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全
(3)session会在一定时间内保存在服务器上,当访问增多时,会比较占用服务器的性能
(4)单个cookie保存的数据不能超过4k,浏览器限制一个站点最多保存20个cookie
------------------------------未完待续---------------------------------------------------