title:cookie session总结
tags: 新建,模板,小书匠
grammar_cjkRuby: true
cookie
- 作用
为了解决http协议无状态的缺陷所做的努力 - 存储位置
是服务器存储在本地客户端的一小段文本,是在客户端保持状态的机制. - 机制
服务器通过HTTP头向客户端发送cookie,然后客户端的浏览器将cookie解析成本地文件,当访问网址时,将自动附上对应服务器的cookie.
- 浏览器查找cookie的规则
浏览器会查找所有的cookie,找出作用范围大于或者等于请求资源范围的cookie,于是把该cookie附在发送给服务器的HTTP请求头上 - 主要内容
- 键值对
保存的数据 - 过期时间
如果没有设置过期时间,则此cookie保存在内存中,生存时间为浏览器会话时间称为会话cookie。如果设置了,则会保存到硬盘中。 - 路径和域
一起构成了cookie的作用范围
- 键值对
- 浏览器查找cookie的规则
session
- 作用
同样是为了结局HTTP协议无状态缺陷的努力 - 存储位置
存储在服务器端,服务器用一种类似于散列表的结构保存session 机制
session采取的是存储在服务器端,针对每一个用户生成一个session,用户在客户端存储一个标识,当用户通过浏览器访问时,将标识也就是sessionid传给服务器,服务器再根据传过来的sessionid查找每一个用户对应的session.session的存取流程
用户每次访问服务器时,会将sessionid一起发送过去.当服务器接收到客户端传来的数据时,会在其中寻找sessionid.如果没有找到,就会为当前的客户端创建一个session,并将sessionid返回给客户端传送sessionid的几种方法
- 使用cookie进行传送,但是有的浏览器可以禁止cookie机制,所以就产生了以下两种解决方法
- 使用url重写,直接将sessionid拼接到url路径后面
- 表单隐藏字段
cookie与session对比
- 存储数据类型不同
cookie只能存储ASCII字符串,如果想要存储二进制或者Unicode,还需要进行格式设置.
session则可以看成一个java容器类,可以存储各种各样java类型
2.存储位置不同而导致的保密程度不同
cookie存储在客户端,对客户是可见的.优化的方法就是敏感的信息不要存储在cookie中.还可以对cookie进行加密,到了服务器再杰迷
session存储在服务器端,对用户不可见,所以安全程度较高.
3.可设置的有效时间不同
cookie可以通过设置很大的数字来代表持久记录用户信息
session的默认过期时间为会话结束,如果将session过期时间设置的过长,会带来内存溢出的风险 - 服务器压力不同
session因为保存在服务端,因而当并发访问量过多时.会造成服务器内存消耗过大,所以一般不太用session来追踪用户会话
而cookie保存在客户端,不占用服务器资源
5.过期时间不用
cookie可以设置为本浏览器窗口和子浏览器窗口有效(过期时间设为-1),还可设为对所有窗口有效(过期时间设为某个大于0的数字)
session只能为本浏览器窗口和子浏览器窗口有效
6.跨域支持不同
cookie可以跨域,比如将domain属性设置为”.abc”,那么所有以”.abc”结尾的域都能访问该cookie.
而session不支持跨域,仅对所在域有效.