Session与cookie的区别

一、Session的概念

  • 存放在服务器的一种用来存放用户数据的类HashTable结构

  • Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。

  • 一般情况下,**服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。**在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据 库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。

  • 当用户在应用程序的Web页面跳转时,存储在Session对象中的变量不会丢失而是在整个用户会话中一直存在下去。

二、Cookie

  • 访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookie是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是在客户端保持状态的方案。
  • Cookie的主要内容:名字、值、过期时间、路径和域。
  • key-value形式。过期时间可以设置,如不设,则浏览器关掉就消失了,存储在内存当中,否则就按照设置的时间来存储在硬盘上的,过期后自动清楚。比方说开关机关闭再打开浏览器后他都会还存在,前者称之为Session cookie 又叫 transient cookie,后者称之为Persistent cookie 又叫 permenent cookie。路径和域就是对应的域名,a网站的cookie自然不能给b用。

区别

  • 存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
  • Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
  • 一个在客户端一个在服务端。因Cookie在客户端所以可以编辑伪造,不是十分安全。
  • Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
  • Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。
  • 域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

Cookie被禁用了怎么办?

  • 单点登录的原理是后端生成一个 session ID,设置到 cookie,后面所有请求浏览器都会带上cookie,然后服务端从cookie获取 session ID,查询到用户信息。
  • 所以,保持登录的关键不是cookie,而是通过cookie 保存和传输的 session ID,本质是能获取用户信息的数据。
  • 除了cookie,还常用 HTTP 请求头来传输。但这个请求头浏览器不会像cookie一样自动携带,需手工处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值