首页

session 和 cookie 的区别

kkcode
2023-06-14  阅读 300

大概的比较一下 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。

本文为作者原创文章,转载无需和我联系,但请注明转载链接。 【前端黑猫】