您的位置:首页 > 其它

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

2016-07-16 22:41 1301 查看
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的流程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息