Session和Cookie的区别

由于http是无状态协议,无法保存用户的状态,为了解决该问题,引入Cookie机制。

解释Http无状态性:当客户端向服务端发送请求时,服务端响应客户端的请求。但当同一个客户端再次向服务器端发送请求时,服务端并不知道它就是刚才的客户端,即:服务端无法保存客户端的状态。

Cookie的工作原理:通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
在服务端发送的响应报文内会有一个Set-Cookie字段信息,通知客户端保存Cookie。当客户端再次向同一服务器发送请求时,客户端会自动在请求报文中加入Cookie值,其选择Cookie的依据是当前的url地址(Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie)。
这里写图片描述
Cookie的类型与内容
Cookie中内容以Key-Value的形式存储,存在两种类型的Cookie:
- session cookie(会话Cookie):未设置过期时间的cookie,一般被保存在内存中,cookie的生命周期为浏览器会话期间
- persistent cookie(持久Cookie):设置了过期时间的cookie,浏览器会将其保存在硬盘上,直至其过期失效

Session

Cookie可以让服务器端程序跟踪每个客户端的访问,但是每次客户端的访问必须传回这些Cookie,如果Cookie很多,则无形增加了客户端与服务端的数据传输量,而session的出现正是为了解决这个问题。
有了session后,同一个客户端每次和服务端交互时,不需要每次传回所有的Cookie值,而是只要传回一个ID,这个ID是客户端第一次访问服务端时生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就可以了,这个ID通常就是name为JSESSIONID的一个Cookie

Session代表服务器和浏览器的一次会话过程,当如JSP页面中未显示的禁止session时,在浏览器第一次请求该JSP时,服务器会为其自动创建一个session,并分配给其一个sessionID,返回给客户端。当客户端再次请求时,会自动在header中加上:Cookie:JSESSIONID=分配到的sessionID,服务器会根据该ID在内存中找到之前创建的session对象(与Cookie不同,Session是保存在服务端)。对于同一个浏览器窗口中的多个标签,同时访问同一应用的不同页面,其session是一样的,但不同的浏览器窗口,其session不一样。

Session ID的保存方法:
1. 使用Cookie来保存。服务器通过设置Cookie的方式将Session ID发送到客户端。如果不设置过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果设置过期时间,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同样会将这个SessionID发送到服务器上。
2. URL地址重写(当客户端禁用Cookie时)即:将SessionID重写到URL地址中,服务端可以通过解析重写后的URL地址获取SessionID;
3. 在表单中增加一个隐藏表单项,并将SessionID添加到隐藏表单项中,通过提交表单将SessionID发送到服务端,服务端通过SessionID找到对应的Session。

Session的删除时间:
1. Session超时
2. 程序显示的调用HttpSession.invalidate()
3. 服务器关闭或停止

Session和Cookie的区别

  1. Cookie保存在客户端,Session保存在服务端;
  2. Cookie保存的是String类型,Session中保存的是Object类型;
  3. Session 的运行依赖 sessionID,而 sessionID 一般存在 Cookie 中(如果浏览器禁用了Cookie,可以通过 URL地址重写方式,即:将该用户SessionID信息重写到URL地址中,服务器可以通过解析重写后的URL获取SessionID)
  4. Cookie中的所有数据都存储在客户端,所以这些Cookie数据可以被访问到,甚至可以通过Firecookie插件添加、修改cookie,所以Cookie不太适合保存重要数据。相比较而言session的安全性要高很多,因为session是将数据保存在服务器端,只是通过Cookie传递一个SessionID,所以Session更适合存储一些重要的数据。
  5. Cookie一般可以长期保存在客户端,直到过期失效,session的生命周期一般是浏览器会话期间。会话结束session也销毁。
  6. 单个Cookie保存的数据一般不能超过4k,同时很多浏览器限制一个站点的总Cookie数为50,而服务端的Session会占用服务器内存,影响性能。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值