登录鉴权入门网站是怎么记住你已经登录了的

举报
yd_218239968 发表于 2026/10/31 11:07:11 2026/10/31
【摘要】 登录一次之后,翻了几十个页面都不用重新输密码,网站是怎么记住你的?靠的就是登录鉴权:登录成功时服务器发你一张“临时通行证”,之后每次请求都带上它,服务器认证不认人。本文从 Cookie、Session、Token 讲到 JWT,把这张通行证的几种做法一次讲清,新手做登录功能之前先看这一篇,能少踩一半坑。先想一个问题:网页请求本身是“没记性”的,你点开首页登录了,再点进个人中心,对服务器来说这...

登录一次之后,翻了几十个页面都不用重新输密码,网站是怎么记住你的?靠的就是登录鉴权:登录成功时服务器发你一张“临时通行证”,之后每次请求都带上它,服务器认证不认人。本文从 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 方案,鉴权这件事,千万别自己造。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。