什么是会话?是指客户端(浏览器)和服务器端之间的数据传输。

例如用户登录,购物车等

会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数据

常用的会话技术

之前学会了域对象的作用,所以在会话管理的时候也可以使用域对象的概念来找到解决方法。

常用的解决方法主要有两种:

数据保存在客户端的Cookie技术

数据保存在服务端的Session技术

2.Cookie技术

2.1.什么是Cookie

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是各自用户自己的数据了

特点是会话数据保存在浏览器客户端

2.2.Cookie技术核心API

Cookie类:用于存储会话数据。常用方法如下:

1.构造Cookie对象

2.设置cookie

3.发送cookie到浏览器端保存

4.服务器端接收cookie

代码示例:

2.3.Cookie原理

1.服务器创建Cookie对象,把会话数据存储到Cookie对象中

2.服务器发送cookie信息到浏览器

3.浏览器得到服务器发送的cookie,然后保存在浏览器端

4.浏览器在下次访问服务器时,会带着cookie信息

5.服务器接收到浏览器带来的cookie信息

2.4.Cookie的细节

1.void setPa uri):设置Cookie的有效访问路径,有效访问路径指的事Cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器的时就会带着Cookie信息,否则不带Cookie信息,默认是在当时钱web项目的路径下

2.void setMaxAge(int expiry):设置Cookie的有效时间

expiry可以是正整数,负整数,和零

正整数:表示Cookie数据保存浏览器的缓存到硬盘中,数值表示保存的时间

负整数:表示Cookie数据保存到浏览器的内存中,浏览器关闭Cookie就丢失了

零:表示删除同名的Cookie数据

3.Cookie数据类型只能保存非中文字符串类型的。可以保存多个Cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

2.5.Cookie案例:显示用户上次访问的时间

功能实现逻辑:

将时间保存在Cookie中,每次访问从Cookie里面调用

第一次访问:

1.获取当前时间,显示到浏览器中

2.创建Cookie对象,时间作为cookie值,名为:lastTime

3.把cookie发送到浏览器保存

N次访问:

1.获取cookie的数据,取出名为lastTime的cookie

2.得到cookie的值(上次访问时间)

3.显示上次访问时间到浏览器中

4.更新名为lastTime的cookie。值设置为当前时间

5.把更新后的cookie发送给浏览器保存

代码实现:

3.Session技术

3.1.什么是Session

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的数据创建一个其独享的Session对象,由于Session为用户浏览器独享,所以当用户在访问服务器的web资源时,可以把各自的数据放在各自的Session中,当用户再去访问服务器中的其他的web资源的时候,其他的web资源再从用户各自的Session中取出数据为用户服务

3.2.Session的核心技术

Session的类是HttpSession类:用于保存会话数据

1.创建或得到session对象

HttpSession getSession() 直接创建一个Session对象

HttpSession getSession(boolean create) 接收布尔值,设置为true时,在没有找到匹配Session编号的对象时新建一个Sessionu对象。如果设置false,则当找不到匹配的Session时,返回null,建议不要用

2.设置session对象

void setMaxInactiveInterval(int interval) : 设置session的有效时间

java.lang.String getId() : 得到session编号

void invalidate() : 销毁session对象

Session对象的方法:

1.setMaxInactiveInterval方法默认30分钟自动回收Session对象

2.使用setMaxInactiveInterval方法修改销毁时间

3.在web.xml文件中全局修改Session默认回收时间

<!– 修改session全局有效时间:分钟 –>
<session-config>
<session-timeout>1</session-timeout>
</session-config>

4.通过invalidate方法,手动销毁Session对象

3.保存会话数据到session对象

void setAttribute name, java.lang.Object value) : 保存数据

java.lang.Object getAttribute name) : 获取数据

void removeAttribute name) : 清除数据

4.如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题:

解决方法是手动发送一个硬盘保护的cookie给浏览器

代码见案例:

3.3.Session原理

代码解读:HttpSession session = reque();

伪码分析执行过程

1.第一次访问创建Session对象,给Session对象分配一个唯一的ID,叫JSESSIONID。

new HttpSession();

2.把JSESSIONID作为Cookie的值发送给浏览器保存

Cookie cookie = new Cookie("JSESSIONID", sessionID);

re(cookie);

3.第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

4.服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象

5.如果找到对应编号的session对象,直接返回该对象

6.如果找不到对应编号session对象,创建新的session对象,继续走1的流程

结论通过JSESSION的cookie值在服务器找session对象

3.4.Session案例:用户登录效果

需求:实现用户登录效果,如果登录成功显示:欢迎回来,×××。如果失败,显示登录失败

使用Session区分不同的用户来实现,整个代码实现分为三块,登录表单提交之后的处理逻辑,登录逻辑,登出逻辑:

默认登录界面。index.html

登录失败页面:

表单提交之后的主处理逻辑:IndexServlet.java

登录处理逻辑:LoginServlet.java

退出处理逻辑:Logou

相关推荐