Session和Cookie
Session和Cookie
一、对Session和Cookie了解
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Http是一种无状态的协议,每一次请求都是独立的,那么对于客户端和服务器而言,这种无状态和独立在需要传输数据和保持某种状态时,就会需要到一种东西对传输过来的数据和需要保持的状态进行保存,提高web的交互能力。
Cookie采用的是在客户端对数据进行保存和对状态进行保持,这种在客户端存储信息的方式十分不安全,因为在每个客户端(可以是浏览器)都是可以查看并删除等操作的。
Session采用的是在服务器端对数据进行保存和对状态进行保持,当创建了一个session对象,并为它分配一个id,这个id就是这个session对象的id,它会复制一个这个id以cookie的形式保存到客户端(浏览器)去,就是cookie中的JESSIONID.。当客户端(浏览器)存在cookie中有我们需要的数据,发送请求到服务器时,会对cookie中的JESSIONID进行判断,如何session中的id已有与JESSIONID进行匹配的,则不会新创建一个session对象,否则会新创建一个session对象并复制一个这个id以cookie的形式保存到客户端(浏览器)去。
二、cookie机制
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie(HTTP协议的组成分为首行(请求就是请求首行,响应就是响应首行)、头信息(请求就是请求头信息,响应就是响应头信息)、空行、体(请求就是请求体,响应就是响应体),那么请求时cookie在请求头信息中被传输到服务器,响应时cookie在响应头信息中传输到服务器生成相应的cookie),然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。
cookie的内容主要包括:键,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式
cookie.setSecure(true)原理:服务器端的Cookie对象是java中的对象,请不要和浏览器端的cookie文件混淆了。服务器端的Cookie对象是方便java程序员包装一个浏览器端的cookie文件。一旦包装好,就放到response对象中,在转换成http头文件。在传递到浏览器端。这时就会在浏览器的临时文件中创建一个cookie文件。但我们再次访问网页时,才查看浏览器端的cookie文件中的secure值,如果是true,但是http连接。这个cookie就不会传到服务器端。当然这个过程对浏览器是透明的。其他人是不会知道的。
三、Session机制
Session采用的是在服务器端对数据进行保存和对状态进行保持,当创建了一个session对象,并为它分配一个id,这个id就是这个session对象的id,它会复制一个这个id以cookie的形式保存到客户端(浏览器)去,就是cookie中的JESSIONID.。当客户端(浏览器)存在cookie中有我们需要的数据,发送请求到服务器时,会对cookie中的JESSIONID进行判断,如何session中的id已有与JESSIONID进行匹配的,则不会新创建一个session对象,否则会新创建一个session对象并复制一个这个id以cookie的形式保存到客户端(浏览器)去,但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息。
