session与cookie的区别

http是一种无状态的协议,为了分辨链接是谁发起的,需要自己去解决这个问题.否则有些情况下即便是同一个网站每打开一个页面也都需要登录一下.而session和cookie就是为了解决这个问题而提出的两个机制.

应用场景

  1. 登录网站,今输入用户名密码登录了,第二天再很多情况下就直接打开了,这个时候用到的一个机制就是cookie;
  2. session一个场景是购物车,添加了商品之后客户端处就可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session.

cookie

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

session

  • 存在服务器的一种用来存放用户数据的类HashTable结构/.
  • 浏览器第一次发送请求时,服务器自动生成了一个hashTable和一个sessionID来标识这个hashtable,并将其通过相响应发送到浏览器.浏览器第二次发送请求会将前一次服务器响应的sessionid放在请求中一并发送到服务器上,服务器从中提取sessionid,并和保存的sessionid进行对比,找到这个用户对应的hashtable.
  • 一般这个值会有时间的限制,超时后,值失效,默认30min.
  • 当用户在应用程序的web页间跳转,存储在session对象中的变量不会丢失而是在整个用户会话中一直存在下去.
  • session的实现方式和cookie有一定的关系,建立一个连接就生成一个sessionid,打开几个页面就好几个了,这里就用到了cookie,把sessionid存在cookie中,每次访问的时候将sessionid带过去就可以识别了.

# 区别

  • 存储数据方面: session能够存储任意的java对象,cookie只能存储String 类型的对象
  • 一个在客户端一个在服务器端,因为cookieid可以伪造,不是十分安全
  • session过多时会消耗服务器资源,大型网站会有专门的session服务器,cookie存在客户端没有问题.
  • 域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

session多服务器共享

  • :服务器实现的session复制或session共享,如jboss在搭集群时配置实现session复制或session共享,致命缺点:不好扩展和移植.
  • 利用成熟技术做session复制,如12306的genfire,如常见的内存数据库redis或memorycache,虽较合适但依赖第三方.
  • 将session维护在客户端,利用copkie 但客户端存在风险数据不安全,且可以存放的数据量较小,所以将session维护在客户端还要对session中的信息加密/
  • 第二种方案和第三种方案的合体,可用gemfire实现session复制共享,还可以将session维护在redis中实现session共享,同时可将session维护在客户端的cookie中,但前提是数据要加密.
  • 这三种方式可迅速切换,而不影响应用正常执行。在实践中,首选 gemfire 或者 redis 作为 session 共享的载体,一旦 session 不稳定出现问题的时候,可以紧急切换 cookie 维护 session 作为备用,不影响应用提供服务

单点登录中,cookie 被禁用了怎么办?(一点登陆,子网站其他系统不用再登陆)

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

作者:lyf687
来源:CSDN
原文:https://blog.csdn.net/liyifan687/article/details/80077928
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值