登录鉴权入门网站是怎么记住你已经登录了的
登录一次之后,翻了几十个页面都不用重新输密码,网站是怎么记住你的?靠的就是登录鉴权:登录成功时服务器发你一张“临时通行证”,之后每次请求都带上它,服务器认证不认人。本文从 Cookie、Session、Token 讲到 JWT,把这张通行证的几种做法一次讲清,新手做登录功能之前先看这一篇,能少踩一半坑。
先想一个问题:网页请求本身是“没记性”的,你点开首页登录了,再点进个人中心,对服务器来说这是两次完全独立的请求,它凭什么知道这还是同一个人?答案是登录成功的那一刻,服务器会发给你一个凭证,你之后的每次请求都自动带上它,服务器查一下凭证,就知道你是谁、登录过没有。
最经典的做法是 Session 加 Cookie。你登录成功,服务器在自己这边建一份记录,叫 Session,里面存着你的用户编号,再生成一个随机字符串当钥匙,叫 Session ID,通过 Cookie 发给你的浏览器。浏览器之后每次访问这个网站,都会自动把 Cookie 带上,服务器拿 Session ID 一查,对上了就放行。它的好处是服务器想让你下线随时能删记录;坏处是记录存在服务器内存里,服务器多了、重启了,状态就要共享、会丢,所以才需要把 Session 统一存到 Redis 里。
第二种做法是 Token,思路正好反过来:服务器不存记录,而是把你的身份信息写进一个带签名的字符串里发给你,你每次请求在请求头里带上它,服务器只要验签名是真的、没过期,就信你。最常见的格式叫 JWT,分三段:头部、正文、签名。正文里是用户编号、过期时间这些信息,注意正文只是编码、不是加密,任何人都能解开看,所以千万别把密码这类敏感信息写进去;真正防伪的是签名,内容被改一个字,签名就对不上,服务器立刻拒绝。
两种做法怎么选?自己做的站、前后端不分离、图省事的,用 Session 加 Cookie,框架一般都内置好了,安全策略也成熟。做 App、小程序、前后端分离项目的,用 Token 更顺手,因为 App 里没有浏览器那套自动带 Cookie 的机制,手动带 Token 更自然。
不管用哪种,安全上有三条红线。第一,凭证必须走 HTTPS 传输,明文路上被截走,别人拿着它就能冒充你登录,这叫会话劫持。第二,Cookie 要设 HttpOnly,这样页面里的脚本读不到它,就算网站有 XSS 漏洞,凭证也不容易被偷走;再设上过期时间,别用永久有效的凭证。第三,退出登录要真退出:Session 做法要把服务端的记录删掉,Token 做法要么等它短时过期、要么维护一份黑名单,只在浏览器里删凭证、服务端不处理,等于没退干净。
新手最容易犯的错,是自己发明鉴权:比如登录后把用户编号存在浏览器本地、请求时直接传编号,服务器也不校验。这等于把钥匙换成了写在门上的纸条,谁改一下编号就能进别人账号。登录功能再简单,也要用框架或成熟库提供的 Session、Token 方案,鉴权这件事,千万别自己造。
- 点赞
- 收藏
- 关注作者
评论(0)