会话
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话,由于HTTP是无状态协议,无法得知两次请求是来自同一个会话,所以需要额外的技术来跟踪会话。常用的会话跟踪技术是cookie与Session。cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
cookie什么是cookie
cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。
cookie实际上是一小段的文本信息,存储在用户本地终端。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。
组成cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制cookie有效期、安全性、使用范围的可选属性组成,具体属性如下:
cookie并不提供修改、删除 *** 作。如果要修改某个cookie,只需要新建一个同名的cookie,添加到response中覆盖原来的cookie。
如果要删除某个cookie,只需要新建一个同名的cookie,并将maxAge设置为0,并添加到response中覆盖原来的cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。
注意:修改、删除cookie时,新建的cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原cookie完全一样。否则,浏览器将视为两个不同的cookie不予覆盖,导致修改、删除失败。
cookie跨域- nginx反代欺骗浏览器jsonpp3p
使用cookie跟踪广告和图片使用情况
SESSION
Session是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而Session保存在服务器上。
针对Web网站来说,Session指用户在浏览某个网站时,从进入网站到浏览器关闭这段时间内的会话。
SESSION通过SESSION_ID来识别不同会话,即Session文件的文件名,而SESSION_ID默认是通过cookie传递。
假设客户端禁用cookie,可以通过URL或者隐藏表单传递sessionID;php.ini中把session.use_trans_sid 设成1,那么连接后就会自己加Session的ID。
cookie和session的区别
- 存放位置不同
cookie存放于客户端,Session存放于服务器过多Session数据会占用服务器资源,cookie存放在客户端没有,分摊后压力很小 安全性
由于cookie存储在客户端,用户可以随意更改,因此安全性相对较差,使用时需要验证数据合法性(数据签名)为避免拷贝其他用户cookie过来直接使用,也就是cookie劫持,需要在cookie中针对IP、UA等加上特殊的校验信息,然后和服务器端进行比对。 存储大小不同
单个cookie保存的数据不能超过4K,原始规范要求一个站点最多保存20个cookie,实际很多浏览器限制都不同,但都大于20。session没有存储大小和数量限制
- nginx ip hash 负载均衡(尽量让同一用户访问同一服务器,在移动端时代效果不好)session复制,例如基于tomcat的session复制使用redis作统一缓存sessionid对应的信息,避免session复制,需要改代码,增加一次网络开销使用jwt,将登陆信息加密存储到客户端缓存中(目前比较通用的解决方案)
参考文章 【详解 cookie 纪要】
参考文章 【cookie和session的详解与区别】
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)