session 和 cookie 的区别
大概的比较一下 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 技术交流群。
上一篇: express 学习笔记分享
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论