商城网站建设公司电话,制作网站软件作品,各网站文风,国外网站的分析工具有哪些目录 1#xff0c;session 的原理如何删除 session1#xff0c;设置过期时间2#xff0c;客户端主动通知 2#xff0c;和 cookie 的区别安全性举例#xff1a;验证码 3#xff0c;举例 1#xff0c;session 的原理
建议先看这篇文章#xff1a;浏览器 cookie 的原理session 的原理如何删除 session1设置过期时间2客户端主动通知 2和 cookie 的区别安全性举例验证码 3举例 1session 的原理
建议先看这篇文章浏览器 cookie 的原理详 介绍了身份验证的步骤 简单来说服务器向客户端发送的【出生证】就是一个 cookie 信息客户端收到后保存在硬盘中之后的请求会自动带上对应的 cookie服务器验证 cookie 信息成功后允许之后的操作。 一般来说session 和 cookie 是联合起来使用的简单的数据放 cookie复杂的放 session。 关键点有2个
cookie 中的关键信息 keyvalue 中的 value 是如何生成的
value 有2种形式一种是 jwt令牌一种就是 sessionId。 session 是保存在服务器端的键值对通过 sessionId 和客户端关联。sessionId 一般会使用 uuid全球唯一标识码Universally Unique Identifier来表示可通过时间戳mac 地址计数器等通过算法实现。 服务器如何验证
对比出入证 sessionId 即可。
如何删除 session
因为浏览器关闭并不会主动通知服务器所以即便 cookie 是会话级别默认过期时间关闭浏览器 cookie 删除也不会影响到服务器的 session所以需要一些手段让服务器认为客户端已经停止了活动把 session 删除以节省空间。
1设置过期时间
当服务器设置过期时间后当客户端长时间没有传递 sessionId 过来时服务器即可自动清除 session。
2客户端主动通知
使用 js 监听页面关闭或其他退出操作此时通知服务器删除 session。
2和 cookie 的区别
cookiesession存储位置客户端不占用服务器资源服务器占用服务器资源存储格式仅字符串任意格式存储大小每个网站仅 4kb理论上无上限安全性易被获取和篡改易丢失-- 相反
安全性举例验证码 实际不可能这样做如果这样做的话那就绕开验证了随便填别人的手机号在 cookie 中获取验证码就能登录了。
可通过 session 机制来解决
3举例
可以使用中间件 koa-session 来更容易的操作 session。 默认情况下koa-session 会将 session 保存在服务器的内存中。也就是说重启服务器就会清空测试时需注意。 const Koa require(koa);
const Router require(koa-router);
const { bodyParser } require(koa/bodyparser);
const session require(koa-session);const app new Koa();
const router new Router();app.keys [some secret hurr];app.use(session(app));router.post(/api/login, (ctx) {const { name, pwd } ctx.request.body;if (name 下雪天的夏风 pwd 123) {ctx.session.id name;ctx.body 登录成功;ctx.response.redirect(/api/home);} else {ctx.body {code: 500,msg: 用户名或密码错误,};}
});router.get(/api/home, (ctx) {if (ctx.session.id) {ctx.body home;} else {ctx.body {code: 500,msg: 未登录,};}
});router.get(/api/logout, (ctx) {// 清空登录信息ctx.session null;ctx.body 退出登录;
});app.use(bodyParser()).use(router.routes());
app.listen(3001);form actionhttp://localhost:3001/api/login methodpostinput typetext namename /input typepassword namepwd /button提交/button
/form效果 注意到退出登录后浏览器端的 cookie 就删除了。这是因为当调用 logout 接口时会设置 ctx.session null会向浏览器添加如下 cookie有效期设置为过去的时间所以直接删除了。同时服务器中对应的 session 也会被清空。 以上。