Web开发之会话管理技术(Cookie、Session)

来源:互联网 发布:海康威视管理端口设置 编辑:程序博客网 时间:2024/04/25 20:26

Web开发之会话管理技术:
管理浏览器和服务器之间的会话过程中产生的会话数据。
一、Cookie技术
特点:会话数据将保存在浏览器客户端。
核心技术:Cookie类,用于储存会话数据
A、Cookie会话的编写流程:
1)服务器创建cookie对象,把会话数据存储到cookie对象中。
Cookie cookie = new Cookie(“name”,”value”);
2) 服务器发送cookie信息到浏览器
response.addCookie(cookie);
底层实现:set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
3)浏览器得到服务器发送的cookie,然后保存在浏览器端。
4)浏览器在下次访问服务器时,会带着cookie信息
底层实现: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
5)服务器接收到浏览器带来的cookie信息
Cookie[] cookies = request.getCookies();
B、Cookie会话的常用API及特点
1)void setPath(String uri) :
设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
2)void setMaxAge(int expiry) :
设置cookie的有效时间。
正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
零:表示删除同名的cookie数据
3)Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB

二、Session技术
特点:会话数据将保存在服务器端。
核心技术:HttpSession类,用于储存Session会话数据
A、Session会话的编写流程:
1). 创建或得到session对象
HttpSession session = request.getSession(); //创建或得到session对象
HttpSession session = request.getSession(false); //只得到session对象
2). 会话数据保存session对象中,和得到会话数据
session.setAttribute(“name”,Object); //保存数据(可以是任意Object)
Object obj = session.getAttribute(“name”) //得到数据
B、Session会话的常用API及特点
1)java.lang.String getId() : 得到session编号
2)void setMaxInactiveInterval(int interval) : 设置session的有效时间
session对象销毁时间:
2.1 默认情况30分服务器自动回收
2.2 修改session回收时间
2.3 全局修改session有效时间


1

2.4.手动销毁session对象
void invalidate();// 销毁session对象
3)如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题
解决办法:可以手动发送一个硬盘保存的cookie给浏览器
Cookie c = new Cookie(“JSESSIONID”,session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
原理就要说到request.getSession();方法的实际底层操作了:
HttpSession session = request.getSession();
1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
2)把JSESSIONID作为Cookie的值发送给浏览器保存
//伪代码:Cookie cookie = new Cookie(“JSESSIONID”, sessionID);
response.addCookie(cookie);
3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器
4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。
5)如果找到对应编号的session对象,直接返回该对象
6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

0 0
原创粉丝点击