简单聊聊Cookie 和 Session #前端#
Cookie##
Cookie就是由服务器发给客户端的特殊信息,一般用于识别不同的用户或标记一些简单的信息。
这些信息将存放在客户端,客户端每次向服务器发送请求的时候都会带上这些特殊的信息,进而识别。
使用
服务器设置响应cookies
在前端领域,为了简单的认识和使用Cookie,一般用到的是一个cookies的包,首先我们需要安装他。
npm i cookies
当客户端访问我们的服务器时,我们用nodejs在后台通过cookies.set('name','information')
给客户端响应一个Cookie。
以后的所有客户端发出的相同域名下的所有的请求都会带上cookies,回传给我的服务器。
客户端获取cookies
cookies.get
可以获取回传回来的cookies
var getting = browser.cookies.get({
url: url,
name: "xxx"
});
其中url为回传cookie的相关联路径,name为回传cookie的名称
cookies的过期时间
cookies的过期时间一般为一个session,即浏览器关闭后,cookies自动清空。各个浏览器之间有略微的不同,有些浏览器会在关闭后保留一小段时间后再删除cookie
cookies的储存形式
每个浏览器有自己的cookie储存形式,是无法跨浏览器使用的,但是在当前浏览器新开一个TAB分页是可以共享cookie的
另外,浏览器隐身模式下,无浏览历史记录,cookie存储区也不会留下任何痕迹
cookie的缺陷
-
cookie存放在客户端,虽然可以有效减轻服务器负载,但也容易被客户端利用进行cookie欺骗
-
cookie大小下限是4K,但考虑到每次客户端请求和被响应都要带着cookie,浏览器一般也限定上限是4k,一般无法存储大量数据
Session##
Session是另一种记录用户状态的方法,不同的是Cookie保存在端浏览器中,而Session保存在服务器上。从某一角度上来说,session的出现,就是为了有效补足cookie的缺陷
原理和作用
在服务器端创建session对象,将用户的关键信息写入对象,形成用户档案,用户来访的时候可以通过查询用户档案,返回数据。
可以用唯一的ID来管理用户,一定程度上防止客户端的cookie欺骗。
用其他属性来标记特殊属性,不受cookie的大小限制,在需要时返回,不会因往返无用数据量太大而造成网络堵塞。
session的缺陷
session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器性能,服务器的负载加大
总结
一般来说,http请求和响应,会同时用上cookie和session,cookie用于简单的数据传输,但是为了不加大网络之间的数据传输量,处于安全和数据复杂度考虑,也会同时用到session。