文章目录
session 和 cookie 有什么区别?
首先,什么是会话?用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
cookie和session都是用来保存会话过程中产生的数据的。
1、session概念以及工作原理
Session是由服务器应用维持的一个服务器端的存储空间。
用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来指向服务器端的Session存储空间。
SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一般情况下,一旦客户端禁用Cookie,那么Session也会失效。
2、cookie概念以及工作原理
Cookie是在HTTP下,服务器或脚本可以维护客户工作站上信息的一种方式。
Cookie不会占服务器资源,是存在客户端内存或者一个Cookie的文本文件中。
我们一般认为Cookie是不可靠的,Cookies是保存在本机客户端上的,但是其信息的完全可见性并且易于本地编辑性,往往可以引起很多的安全问题。
3、两者的区别?
不同类型 | cookie | session |
---|---|---|
存放位置 | 数据存放在客户浏览器 | 数据存放在服务器上 |
安全性 | 安全性较差,因为存放在客户端,很容易被其他人得到 | 因为存放在服务器端,所以安全性较好 |
性能方面 | 性能高一些 | 因为存放在服务器上,访问量增多时,会降低服务器性能 |
数据量 | 单个cookie保存的数据不能超过4kb,很多浏览器限制一个站点最多保存20个cookie | session不存在这个问题 |
鉴于以上几点区别,一般,我们将用户登录信息等重要信息存放在session中,而其他需要保留的信息存在cookie中。
如果客户端禁止 cookie ,能实现 session 还能用吗?
一般情况下,在会话中,服务器存储的session是通过sessionid存储在cookie中,来存储在客户端的。所以,如果浏览器禁用了cookie,客户端请求没办法传递sessionid,服务器无法识别用户身份,会导致session失效。
但是,我们可以通过其他方法,在禁用cookie的情况下,实现session的使用。方法如下:
重写url
把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数。