我认为的session好像不是这么这样的,koa中使用session,

我依稀记得又一次面试的经历,他先让我说出对 cookie和session的区别是啥?
我作为初级前端菜鸟肯定就是
cookie 是由服务器端生成 保存在客户端,可以用来存储信息
session 是由于服务器端成,保存在服务器端的,
说完了 面试官问我,还有什么要补充的吗?
然后面试官会意一笑,你说下 session是关闭标签后失效还是关闭浏览器后失效。
我当时想这么简单,session是会话肯定就是用户关闭浏览器就失效了哈
然后当我信心满满的答上来之后,收到的是下去之后在了解了解。
本来想反驳的,想想还是算了。因为面试还得继续。本来想着面完之后问下呢,没想到问完之后人家就直接走了。
好了,扯得有点远了哈,回归正题哈 koa中使用session
这里我使用了一个第三方中间件 koa-session
第一步安装 npm install koa-session --save
// 引入 并配置中间件

var session = require('koa-session');
app.keys = ['some secret hurr']; // cookie 签名
const CONFIG = {
	key: 'koa.sess', /** 默认 */
	maxAge: 100000,// 过期时间
	overwrite: true, /** 可以重写吗 */
	httpOnly: true, /** 仅仅是服务器端能访问 */
	rolling: false, /** 每次访问都更新session */
	renew: true, /**  默认 session 快要过期的时候 重新设置*/
  };
  app.use(session(CONFIG, app));

设置和使用 session

router.get('/',async ctx=>{
	console.log(ctx.session.userInfo); 
	ctx.body="获取session";
})
router.get("/login",async ctx=>{
	ctx.session.userInfo="张三";
	ctx.body="登录成功!"
})

然后我在本地测试了下分为以下几种情况
1.在不设置maxAge的时候 关闭浏览器 再次进入是无法访问到session的
2.设置maxAge之后 在它没有过期的范围内 不管是关闭浏览器还是关闭标签都可以访问到 。
其实吧 服务器端生成一个session 会在客户端有一个 sessIonID的东西
每次访问服务器他就会比对这个sessionID和服务器上的session 进行比对
就好比一个锁和钥匙的关系似得。
你看到的虽然是同一个值,当时当你关闭浏览器后,之前的那个钥匙就失效了,
再次访问,服务器会给你一个新的钥匙,让你去打开服务器端的这个锁。
此seesion并不是之前的那个session 虽然数值一样哈

但是 当你关闭浏览器之后 服务器端的session还没有失效

renew: true 这个配置还是很重要的 默认是false
当用户在前台无操作的 过一段时间session就会自动过期,用户再操作的时候就会跳转到登录页面
所以只要,再快过期的时候,用户操作了一下就会重新计时。

原创文章 288 获赞 101 访问量 4万+

猜你喜欢

转载自blog.csdn.net/yunchong_zhao/article/details/105835657