关于session

◇◆丶佛笑我妖孽 提交于 2019-12-29 21:43:52

1.session是什么?

session 指的是会话,但是后端人员常说的session,全程叫:服务器session会话存储

2.特点

(1)存在于服务端
(2)存储的是浏览器和服务器之间沟通产生的一些信息

3.存储

默认session的存储在服务器的内存中,每当一个新的客户端发来请求,服务器都会新开辟初一块空间,供session使用。

4.工作流程

-- 第一次浏览器请求服务器的时候,服务器会开辟初一块内存空间,供session会话使用。
-- 返回响应的时候,会自动返回一个cookie,(有时候,会返回多个,为了安全)cookie里包含着,上一步会话存储“容器”的编号(id)
-- 以后请求的时候,回自动携带这个cookie,给服务器
-- 服务器从该cookie中拿到对应的session的id,去服务器中匹配
-- 服务器会根据匹配信息,决定下一步的业务逻辑。

5.备注

1. 一般来说。cookie一定会配合session使用
2. 服务端一般会做session的持久化,防止由于服务器重启,造成的session丢失。

6.举个🌰:

在server.js中

6.1.引入express-session模块 (用于在exporess 中操作session)
 let session = require(‘express-session’)
6.2.引入connect-mongo 模块,用于session持久化
let mongoStore = require(‘connect-mongo’)(session)
6.3.配置全局对象:
app.use(session({
		name:'userid', //设置cookie的name,默认值是:connect.sid
	    secret:'daiwang', //参与🔐加密的字符串(又称签名)
	  	saveUninitialized:false, //是否在储存内容之前创建会话
	 	resave:true, //是否在每次请求时,强制重新保存session,即使	他们没有变化
		store:new MongoStore({
	   	url:'mongodb://localhost:27017/cookies_container',
	   	touchAfter:1800 ,//修改频率 (例:在24小时之内只更新一次)
		  }),
	  	cookie:{
	 	   httpOnly:true,//开启后前端无法通过JS操作cookie
	 	   maxAge:1000 * 30 ,//设置cookie的过期时间
 	 },
}))
6.4.给session值:(在业务路由)
request.session._id = findResult._id 
6.5.取session值:(在UIrouter)
const {_id} = request.session

补充内容:

给密码加密:

1.sha1版:

(1)安装
yarn add sha1
(2)引入
let sha1 = require('sha1')
(3)使用
注册时往数据库创建数据:password:sha1(password)
登录时: 			password:sha1(password)

2.md5版

(1)安装
yarn add md5
(2)引入
let md5 = require('md5')
(3)使用
注册时往数据库创建数据:password:md5(password)
登录时: 			password:md5(password)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!