cookie和session的区别

目录

 

(一)cookie是什么?为什么存在?

(二)cookie在哪

(三)cookie中的数据来自哪里

(四)session是什么?为什么存在?在哪?

(五)cookie与session联合工作

(六)cookie被浏览器禁了咋办

(七)cookie 和session 的区别:


整合个人理解与

https://www.cnblogs.com/shiyangxt/articles/1305506.html

https://blog.csdn.net/liyifan687/article/details/80077928

(一)cookie是什么?为什么存在?

(1)cookie是缓存的意思

(2):cookie是为了解决http的无状态性

就比如说我们用用户名和密码登陆上了某宝进入了首页,现在我们看见了一款商品想点进去看看,结果一点击,立马回到了登录页面让你先登录,也就是说我们每点击某宝的一个页面都要让我们登陆一次,是不是太烦了?!

每次都要登录的原因是我们输入的用户名和密码没有被保存在一个具体的地方,而cookie就是我们期待的保存数据的地方。保存下来就不用每次都手动输入了,浏览器自己拿就好了

这样,只要cookie没被清除,第二天打开电脑照样不用输入密码,直接进某宝

(二)cookie在哪

cookie存在于客户端

(三)cookie中的数据来自哪里

通俗讲:cookie是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。

严谨来说:Cookie是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案

Cookie的主要内容包括:名字,值,过期时间,路径和域。

(四)session是什么?为什么存在?在哪?

(1)session名为会话,是存在于服务器的一种用来存放用户数据的类HashTable结构。

同理于某宝登陆,如果用户登陆某宝退出,又登陆,短时间内频繁退出登录,我服务器还能每次都重新拿客户端数据?!所以服务器也要建立一个结构来存储信息,这就是session,与cookie一样它也不能一直存在,默认保存时间是30分钟。

(五)cookie与session联合工作

开始的开始是用户登陆,用户一旦发送登陆请求,这个请求就会被发送给服务器,服务器就会建立对应于这个网站的session来保

存这个网站的相关信息,且用sessionID来唯一标识。同时服务器向本地机器上存储一小段文本,里面包含了sessionID。


浏览器第二次发送请求会将前一次服务器响应中的Session ID从cookie取出放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和服务器端保存的所有Session ID进行对比,找到这个用户对应的session。 
一般session存在会有个时间限制,超时后毁掉这个值,默认30分钟。


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


注意:Session的实现方式和Cookie有一定关系。比如在某宝,某宝的页面有很多吧,如果建立一个连接就生成一个session id,打开几个页面就好几个了,这里就又用到了Cookie,把session id存在Cookie中,某宝的所有页面都用同一个sessionID,每次访问的时候将Session id带过去就可以识别了.(每个页面的cookie是不同的,只是公有的信息相同,比如登陆名密码与sessionID)


(六)cookie被浏览器禁了咋办

声明:保持登录的关键不是cookie,而是通过cookie 保存和传输的 session ID,本质是能获取用户信息的数据。

session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应

中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给

服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止则必须有其他机制以便在cookie被禁止时

仍然能够把session id传递回服务器。

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器

会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如: 
<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form> 
实际上这种技术可以简单的用对action应用URL重写来代替。

(七)cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象

3、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。

4、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,大型网站会有专门Session服务器,
   考虑到减轻服务器性能方面,应当使用COOKIE,Cookie存在客户端没问题。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个        问题的办法是JSONP或者跨域资源共享。

6、建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中

(八)session多服务器间共享

1、服务器实现的 session 复制或 session 共享,如 webSphere或 JBOSS 在搭集群时配置实现 session 复制或 session 共享.致命缺点:不好扩展和移植。
2、利用成熟技术做session复制,如12306使用的gemfire,如常见内存数据库redis或memorycache,虽较普适但依赖第三方.
3、将 session维护在客户端,利用 cookie,但客户端存在风险数据不安全,且可以存放的数据量较小,所以将session 维护在客户端还要对 session 中的信息加密。
4、第二种方案和第三种方案的合体,可用gemfire实现 session 复制共享,还可将session 维护在 redis中实现 session 共享,同时可将 session 维护在客户端的cookie 中,但前提是数据要加密。


这三种方式可迅速切换,而不影响应用正常执行。在实践中,首选 gemfire 或者 redis 作为 session 共享的载体,一旦 session 不稳定出现问题的时候,可以紧急切换 cookie 维护 session 作为备用,不影响应用提供服务


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值