大家好,我是修真院第15期java学员,今天我给大家分享一下关于cookie和session的一些知识点
1.背景介绍
我们为什么要使用cookie和session
因为http请求是无状态的(不能记录用户的登录状态等),所以需要某种机制来保存用户的登录状态等信息
在下次访问web服务的时候,不用再次校验是否登录等状态,session机制和cookie机制分别是在服务器端和浏览器端的解决方案。
2.知识剖析
什么是cookie?
Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息 。
什么是session
中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息。
与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义
“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道
在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案
有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。 如果客户请求不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。
3.常见问题
1、cookie和session的区别
2、创建cookie
3、使用cookie属性的注意问题
4.解决方案
答:1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。 2、session中保存的是对象,cookie中保存的是字符串。 3、session会在一定时间内保存在服务器上。 当访问增多,会比较占用你服务器的性能。 4、单个cookie在客户端的限制是4K
答:1.创建Cookie对象 2.设置最大时效 3.将Cookie放入到HTTP响应报头
答:属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。 因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。 因而不要期望通过request.getCookies得到的cookie中可以使用这个属性。这意味着,你不能仅仅通过设置cookie的最大时效,发出它,在随后的输入数组中查找适当的cookie,读取它的值,修改它并将它存回Cookie,从而实现不断改变的cookie值。
5.编码实战
6.扩展思考
会话COOKIE和持久COOKIE的区别?
如果不设置过期时间,则表示这个COOKIE生命周期为浏览器会话期间,只要关闭浏览器窗口,COOKIE就消失了。这种生命期为浏览会话期的COOKIE被称为会话COOKIE。会话COOKIE一般不保存在硬盘上而是保存在内存里。 如果设置了过期时间,浏览器就会把COOKIE保存到硬盘上,关闭后再次打开浏览器,这些COOKIE依然有效直到超过设定的过期时间。 存储在硬盘上的COOKIE可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的COOKIE,不同的浏览器有不同的处理方式。
7.参考文献
百度