Servlet入门(三)
一、cookie
1.简介
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户计算机暂时或永久保存的信息。
2.用法
- 创建Cookie对象,绑定数据
new Cookie(String name,String value) - 发送Cookie对象
response.addCookie(Cookie cookie) - 获取Cookie,拿到数据
Cookie[] request.getCookies()
3.细节
-
cookie数据存在客户端,只能存4kb,数据不安全。
-
一次可以发送多个cookie,可以创建多个Cookie对象,用法是使用response调用多次addCookie方法发送cookie即可。
-
cookie在浏览器中的保存时间:
- 默认情况下,当浏览器关闭后,Cookie数据被销毁
- 持久化存储:
setMaxAge(int seconds)
正数 将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
负数 默认值
零 删除cookie信息
-
在tomcat 8 之前 cookie中不能直接存储中文数据。(需要将中文数据转码—一般采用URL编码(%E3))
-
在tomcat 8 之后,cookie支持中文数据但是特殊字符还是不支持,还是采用URL编码存储,URL解码解析。
-
默认情况下cookie不能共享,共享将path设置为"/" (setPath(String path))。
二、session
1.简介
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。
2.用法
- 获取HttpSession对象。
- 使用HttpSession对象。
3.原理
- 第一次获取session,如果没有cookie,会在内存创建一个新的session对象。
- cookie的响应头里面的set-cookie会把新创建的session的JSESSIONID传递给浏览器。
- 下一次请求是通过cookie的请求头把session的JSESSIONID传递给session的请求。
- 通过JSESSIONID找到session的对象。
4.细节
-
session数据存在服务器端,存储大小无限制,数据安全。
-
服务器如何在确保在一次会话范围内保证多次获取的session对象是同一个?
是基于cookie的,在cookie(没有则新建一个)的响应头里的JESSIONID,验证对象是否为同一个
-
当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下。不是。
如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存 -
客户端不关闭,服务器关闭,两次获取session是否为同一个?
不是,但是在tomcat中自动将session对象序列化到硬盘上,等服务器启动在转到内存
-
session什么时候被销毁?
- 服务器关闭
- session对象调用invalidate()
务器启动在转到内存
-
session什么时候被销毁?
- 服务器关闭
- session对象调用invalidate()
- session默认失效时间 30分钟