当前位置: 首页 > Web前端 > JavaScript

cookie、session、webstorage的区别

时间:2023-03-27 13:03:31 JavaScript

cookie和session首先使用cookie和session的目的是为了跟踪和记录用户状态,因为http协议是无状态协议,在某些场景下服务器需要记录用户状态,比如购物车,需要识别特定用户,服务器为特定用户创建特定session来识别和跟踪用户;其次,cookie和session都是session技术,session是保存在服务端的,而cookie是保存在服务端的,客户端和服务端无法知道请求对应的是哪个session,依赖cookies来跟踪session。因此,在跟踪用户方面,cookies和session是一种合作关系。浏览器第一次访问服务器时,会创建一个session对象,通过cookie返回给浏览器(服务器会在响应头中添加一个Set-Cookie选项,浏览器通常会在之后保存cookie接收此类响应以识别用户)。在使用限制方面,cookies可以在有效期内保存信息(setMaxAge()默认设置有效期或浏览器关闭后过期),但有大小限制(约5kB),浏览器有限制存储cookie的数量(每个域名可能是30个或50个),如果数量过多,headersize会超过服务器的处理限制;session本身没有大小限制,但是和服务器的内存大小有关,而且session只会在服务器上保存一段时间才会消失,所以过多的session会增加服务器的压力。在安全方面,cookies存在安全隐患,可以通过拦截获取cookies后进行攻击。会话可以被认为是一个抽象的概念。为了实现中断和继续等操作,开发者将用户代理与服务器的一对一交互抽象为“会话”,进而衍生出“会话状态”,这就是会话的概念。cookie是一个实际的东西,http协议中header中定义的字段,可以认为是session的后端无状态实现。在用途上,除了跟踪会话,cookies还可以保存用户偏好或者保存用户名和密码等,可以说cookies的用途更加广泛。cookie和localStorage的区别首先,两者的用途不同。Cookie最初是用来跟踪和记录用户状态,用于客户端和服务器之间的信息传递,而localStorage的用途是在客户端存储一些简单的数据。.其次,两者的尺寸限制不同。cookie限制比较小,5kB左右。如果在超过单个域名限制后设置cookie,浏览器会清除之前设置的cookie,而localStorage的大小比较大。主流是5MB。第三,两者的保存期限不同。理论上,localStorage是永久有效的,也就是说,如果不主动清除,它是不会消失的。但在移动设备的浏览器或WebView中,可能由于各种原因(退出app、网络切换等内存不足等原因)被清除;cookies比较灵活,可以设置过期日期expires(时间格式为GMT),如果不设置expires,这样的cookies称为sessioncookie,它保存在内存中,当session结束,也就是浏览时cookie在浏览器关闭时消失。第四,在网络传输方面,每次HTTP请求时,都会自动在请求头的cookie字段中加入同域名的cookie发送给服务器,但是可以设置Secure选项,这样cookie只在安全请求中发送,所以如果cookie内容过多会增加网络开销;不会带localStorage的内容。第五,在浏览器支持方面,IE7及以下版本不支持网络存储,cookie兼容性相对较好。第六,在操作方面,localStorage提供现有的API来访问操作,cookie需要自己封装或者使用第三方库;但是,cookies可以由服务端设置,也可以由客户端设置,而localStorage只能由客户端设置。另外,因为cookie比较灵活,还可以设置domain、path、httpOnly,domain和path一起来限制cookie可以访问哪些URL,即请求的URL是Domain或其子域,而路径是URL是路径或子路径。然后就可以访问cookie了;如果cookie设置为httpOnly,则客户端无法通过js代码访问cookie。一般来说,cookie的用途比较多,也比较灵活,但是存储量小,localStorage可以存储更多的内容。cookies的优缺点缺点每个域名下cookies的数量是有限的。存储容量太小,只有5kB。每个HTTP请求都会发送到服务器,影响资源获取效率。需要自己封装获取、设置、删除cookies的方法。优点是比较灵活。Multi-sessionStorage和localStoragesessionStorage用于在一个session中本地存储数据,只能被同一个session中的页面访问,session结束时数据也被销毁,所以sessionStorage只是session级存储,不是A持久的本地存储。localStorage是一个持久化的本地存储,除非通过JS删除,或者手动清除缓存,否则理论上数据不会过期。由于体积小,cookie不适合用于存储目的,但主要用于会话凭证。LocalStorage和sessionStorage由于体积较大(5MB为业界主流),更适合在客户端存储简单的数据,主要以字符串形式存储。由于sessionStorage数据会在session结束后被销毁,更适用于对安全性要求较高的场景;也适合存放一些与当前session强相关的数据,比如记录跳转的路由信息??,在其他sessionwindow中不适用,可以存放在sessionStorage中。如果需要访问的数据比较多,结构复杂,可以考虑使用indexDB,但是需要考虑indexDB的兼容性。