session 和 cookie 的区别

发布于 2022-05-10 13:42:08 字数 1500 浏览 1061 评论 0

大概的比较一下 session 和 cookie 的区别,不涉及深入的原理。

cookie

首先 http 是无状态的协议,客户每次读取 web 页面的时候,服务器都打开新的会话,服务器也不会自动维护客户的上下文信息,要实现辨别用户身份,就用到了cookie

当我们填好用户密码登录的时候,会向服务器发送一个请求,服务器验证用户通过后,就会给客户端返回一个响应头 Set-Cookie ,从而使客户在之后的请求,请求头中都有用户信息的 cookie,服务器拿到请求头中的 cookie,验证正确以及是否过期,来决定是否允许访问。这种会话cookie,是保存在内存中的,也就是当浏览器程序关闭以后,内存消失,cookie 也就不存在了。还有一种像chrome带有保存密码的功能,是将cookie信息保存在客户端硬盘中,使得我们下次打开浏览器还可以保持用户登录状态。

cookie的内容主要包括:名字,值,过期时间,路径和域,所以不在作用范围内的(路径或者 domain 域名)cookie 不会生效,同样过期时间后,cookie 也会消失

一个 domain 下最多保持20条 cookie,每条 cookie 的不超过 4k

session

session 是一种服务器端的信息管理机制,将各种信息以文件的形式保存在服务器的硬盘中。但是为了与客户端交流,知道当前客户端访问是否有权限,这种服务器端保持状态的方案在客户端也需要一个标识辨别用户,就要用到 cookie。通过在 cookie 添加 session_id,来辨别是谁访问的。当客户端第一次向服务器发出请求,客户端会先检查一下,客户端的cookie里有没有session——id ,如果没有就会新创建一个。如果第二次请求有这个id,就会从存放的数据里检索对应的 sessionid,匹配从而响应对应的页面或者数据。但是由于这个sessionid也是依赖cookie的,存在于客户端内存中,也就是当浏览器关闭,cookie消失,这个 sessionid 也就不存在了。再次访问,服务器就会认为没有,还会再创建一个 sessionid。

当然这个 sessionid 也可以保存在客户端硬盘中,从而保证下次打开浏览器,还拥有 sessionid 保持访问状态。

另外当浏览器禁止 cookie 后,服务器端的做法是重定向 url ,在url后面拼接一个 sessionid=xxxxxxx,从而保持了解客户端的状态。

两者的比较,关系

首先最简单明了的是 ,cookie 是存放在客户端 ,浏览器中的,session 是将信息存放在服务器中的。

cookie 容易被劫持,在客户端存放的 cookie 信息就会泄露,容易修改 cookie 造成 cookie 欺骗。而 session 就安全一些,首先这个 sessionid 的值通常是打开浏览器第一次请求服务器端得到的,不知道具体访问时间,就无从劫持。关闭浏览器的第二次访问,sessionid 已经修改。再次 ,sessionid 是通过秘钥,使用 md5 或者其他加密算法加密,也不容易破解。当考虑到安全性的时候应该使用session

两者不是对立的,不能具体说哪个好,而是共同作用。通常一些不重要小巧的信息,都放在 cookie 中,登陆信息等重要信息使用 session。 都是用 session,请求过多的话,会加重服务器的负担,考虑减轻服务器压力,结合使用 cookie。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

负佳期

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

留蓝

文章 0 评论 0

18790681156

文章 0 评论 0

zach7772

文章 0 评论 0

Wini

文章 0 评论 0

ayeshaaroy

文章 0 评论 0

初雪

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文