express中session设置secret后整体流程是什么?

所有的session-id都存储在cookie里面默认为connect.sid. 流程大概是

若本次cookie中没有connect.sid,则生成一个 [用secret生成connect.sid]

  1. uid-safe生成一个唯一id,记为sessionid,保证每次不重复;
  2. 把上面的connect.sid制作成 's:' + sessionid + '.' + sessionid.sha256(secret).base64() 的形式,实现在node-cookie-signature的sign函数;
  3. 把sessionid用set-cookie返回给前端;

若本次cookie中包含connect.sid,则验证它是否是本服务器生成的 [用secret验证connect.sid]

  1. 取出cookie中的connect.sid,形式是上面的 's:' + sessionid + '.' + sessionid.sha256(secret).base64() ;
  2. 从connect.sid中截取出sessionid=connect.sid.slice(2, connect.sid.indexOf(’.’));
  3. 用取出的sessionid再算一次 sessionid.sha256(secret).base64() 记为 mac;
  4. 截取connect.sid中’.'后的部分与mac对比;node-cookie-signature的unsign函数(用上次计算的sha256值和这次计算的sha256值进行比较,只要secret一样,结果就一样);
  5. 验证成功的sessionid继续往下走。

总结

用secret进行签名保证存在cookie中的connect.sid是本服务器上次生成的。除非知道secret,不然没办法伪造connect.sid中的sessionid,避免知道了sessionid生成算法的人(uid-safe)使用sessionid随便试探来攻击网站。

楼主的问题:解密后的值与加密前对比,及存储在哪里。 解密,算了两次带secret的sha256哈希值,判断两次sha256哈希值是否相等就达到效果了,哈希值没有解密的过程哦。存储,就是存储在connect.sid里面的 ‘.’ 后面的部分。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值