cookie和session

原创 2018年04月14日 22:49:46

大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务5中,cookie和session的相关知识点



一、背景介绍

HTTP协议的无状态性


有状态

A:你今天中午吃的啥?

B:吃的大盘鸡。

A:味道怎么样呀?

B:还不错,挺好吃的。


无状态

A:你今天中午吃的啥?

B:吃的大盘鸡。

A:味道怎么样呀?

B:啊?啥?啥味道怎么样?


cookie和session存在的意义就是为了保存http协议客户端/服务器间的部分有用的状态


无状态加持cookie机制

A:你今天中午吃的啥?

B:吃的大盘鸡。

A:你今天中午吃的大盘鸡味道怎么样呀?

B:还不错,挺好吃的。


cookie并没有让http协议变得有状态,而是保留了部分有用的状态



cookie和session


假如一个咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来记录某位顾客的消费数量。有两个记录的方案

1、发给顾客一张卡片,上面用印章记录着消费的数量,一般卡片还有个有效期限。每次喝咖啡时,顾客出示这张卡片,店员就在卡片上盖个章。

2、发给顾客一张会员卡,会员卡上有唯一标识的卡号,每次消费时,顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。

顾客就相当于客户端浏览器,店员相当于服务器。方案一就是在客户端保持状态。也就是cookie;方案二是在服务器端保持状态,也就是session。


cookie

Cookie 是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器内存或用户本地硬盘(客户端)上的小文本文件(内容通常经过加密),它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问 Cookie 信息


session

Session机制是一种服务端的机制,服务器使用一种类似散列表的结构来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端里的请求里是否已包含了一个session标识--sessionID,如果已经包含一个sessionID,则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用(检索不到,可能会新建一个),如果客户端请求不包含sessionID,则为此客户端创建一个session并且声称一个与此session相关联的sessionID,sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串(服务器会自动创建),这个sessionID将被在本次响应中返回给客户端保存。



二、知识剖析

怎么应用cookie

学习cookie需要掌握的两个要点

1、cookie的发放和读取过程

2、cookie的常用方法(API)


cookie的发放和读取

cookie的发放是通过扩展HTTP协议来实现的,服务器端通过在HTTP的响应中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。利用HttpServletRespones的addCookie()方法将它设置到客户端

被该服务器设置过cookie的客户端之后的每次访问都会在请求头上携带该cookie的信息(只要在设置的路径范围内),利用HttpServletRequest的getCookie()方法来读取客户端的Cookie,返回一个Cookie数组


cookie的常用API及注意事项

1.Cookie有效期:使用setMaxAge()方法设置

2.Cookie有效域:setDomain(String domain)/getDomain()

3.Cookie有效路径:setPath(String uri)/getPath()



怎么应用session

学习session需要掌握的两个要点

1、理解sessionid

2、session的常用方法(API)


对sessionid的理解

sessionid是作为服务器识别客户端的手段而出现的,session是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户

sessionid的载体有三种:

1、使用cookie(默认、最常用)

2、URL重写的方式(针对cookie被禁的情况)

3、在页面表单里面增加隐藏域(和第二种的区别是它使用post)


session的常用方法(API)及注意事项

1、setAttrubute(String name,Object value)/getAttrubute(String name)

2、session.setMaxInactiveInterval();参数单位是秒


Cookie和Session之间的区别

1.Cookie数据存放在客户的浏览器(本地),session数据放在服务器上

2.Cookie不如session安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,所以出于安全性的考虑应当使用Session

3.Session会在一定时间内保存在服务器上。当访问增多,会占用较多的服务器资源,所以出于性能考虑则应当使用cookie

4.session因为是保存在服务器上,所以不支持跨域的访问




三、常见问题

1、配置服务器集群情况下客户端拿不到session的问题

2、相同域下sessionid覆盖的问题


4.解决方案

1、使用nginx负载均衡策略中的ip_hash设置,每个请求按访问ip的hash结果进行分配,这样可以使每一个访客固定访问一个后端服务器。

2、在web服务器的配置中可以修改自动分配的sessionid的key


五、编码实战



六、扩展思考

token

七、参考文献

1.CSDN博客:https://blog.csdn.net/cxzhq2002/article/details/750148

2.师兄的PPT

八、更多讨论

Q1、 cookie存在本地的话会不会存在被篡改的风险? 

答:不仅存在本地会,存在浏览器也会,cookie本身安全性就低

Q2、如果cookie被禁用了,session还能用吗

答:url重写或者表单隐藏域都可以让客户端请求携带上sessionid

Q3、 发送到服务器的请求会携带全部cookie吗?

答:不会,cookie本身会规定作用域的,在作用域以内才会被客户端携带

Q4、 cookie和localstorage有什么区别?


Q5、介绍下session钝化机制

将服务器中不经常使用的Session对象暂时序列化到系统文件或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成




小课堂视频

PPTPPT

感谢大家观看

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

会话session和cookie原理(备java基础,jsp,servlet,tomcat)

本课程包含会话概念、HttpSession接口的使用方法、使用会话实现访问控制、已完成的Demo的登录控制及会话失效、使用会话失效实现退出登录功能、会话实现机制、了解Cookie阻止处理及Cookie与会话的区别。QQ群:264572737
  • 2016年10月12日 10:11

session与cookie区别精选

  • 2017年09月12日 10:29
  • 20KB
  • 下载

session和cookie的区别

  • 2018年01月09日 13:01
  • 3KB
  • 下载

浅谈Session与Cookie的区别与联系

一、Session的概念Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识...
  • duan1078774504
  • duan1078774504
  • 2016-07-14 21:02:55
  • 44003

深入分析理解session与cookie的作用

session与cookie在web开发中我们用到的不少了,那么关于session与cookie你有深入理解吗?今天我们就一起来看一篇关于深入分析理解session与cookie的作用的例子。 ...
  • u011816231
  • u011816231
  • 2017-04-06 09:38:59
  • 5117

session与cookie的介绍和两者的区别之其相互的关系

本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对自己的开发工作中灵活运用带来启示。 c...
  • weixin_37196194
  • weixin_37196194
  • 2017-02-19 18:28:28
  • 5995

理解Session和Cookie机制

一、Cookie机制 在web程序中是使用HTTP协议来传输数据的,因为http是无状态协议,一旦数据交换完毕,客户端和服务器端的连接就会关闭,再次交换数据需要建立新的连接,所以无法实现会话跟踪,c...
  • bingogirl
  • bingogirl
  • 2016-06-25 23:41:51
  • 1274

Cookie和Session之间的关系重新复习一下

Cookie干嘛的? 会话(cookie,session)技术的一种. 因为http协议是无状态的,每次都是基于一个请求一个响应.每次请求和响应都跟上次没有关系. 我们需要记录之前对话信息...
  • dodan
  • dodan
  • 2016-07-14 23:41:02
  • 3263

cookie和session工作机制和使用场合详解

虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web...
  • jaryle
  • jaryle
  • 2016-08-21 18:40:08
  • 1258

[转载]cookie和session的区别和应用场景

区别和联系:     Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个cookie的文本文件中;而“Session”则会占用服务器资源。...
  • GuoZicheng00
  • GuoZicheng00
  • 2015-12-06 22:53:29
  • 1493
收藏助手
不良信息举报
您举报文章:cookie和session
举报原因:
原因补充:

(最多只允许输入30个字)