java会话管理基础Word文档格式.docx

上传人:b****5 文档编号:19867810 上传时间:2023-01-11 格式:DOCX 页数:13 大小:187.61KB
下载 相关 举报
java会话管理基础Word文档格式.docx_第1页
第1页 / 共13页
java会话管理基础Word文档格式.docx_第2页
第2页 / 共13页
java会话管理基础Word文档格式.docx_第3页
第3页 / 共13页
java会话管理基础Word文档格式.docx_第4页
第4页 / 共13页
java会话管理基础Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

java会话管理基础Word文档格式.docx

《java会话管理基础Word文档格式.docx》由会员分享,可在线阅读,更多相关《java会话管理基础Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

java会话管理基础Word文档格式.docx

●如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。

若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。

将最大时效设为0则是命令浏览器删除该cookie。

●注意,删除cookie时,path必须一致,否则不会删除

●显示用户上次浏览过的商品

HttpSession

●在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:

一个浏览器独占一个session对象(默认情况下)。

因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

●Session和Cookie的主要区别在于:

•Cookie是把用户的数据写给用户的浏览器。

•Session技术把用户的数据写到用户独占的session中。

●Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

HttpSessionAPI

●获得Session对象

•Sessionsession=getSession(booleanflag);

●获得会话ID

•Session.getId();

●保存数据

•Session.setAttribute(“name”,Object);

●获取数据

•Session.getAttribute(“name”);

session

●注意,虽然代码相同,但不同浏览器得到的各自的数据

session实现原理

●疑问:

服务器是如何实现一个session为一个用户浏览器服务的?

浏览器禁用Cookie后的session处理

●禁用Cookie后servlet共享数据导致的问题。

●解决方案:

URL重写

•response.encodeRedirectURL(java.lang.String 

url)

•用于对sendRedirect方法后的url地址进行重写。

•response.encodeURL(java.lang.String 

url)

•用于对表单action和超链接的url地址进行重写

●附加:

•session的失效(默认30分钟)

•web.xml文件配置session失效时间

session案例

●使用Session完成用户登录

●使用Session完成随机验证码

用户浏览过的商品

用户上次访问的时间

Servlet编程

1)Servlet生命周期(重点)

构造方法:

创建servlet对象。

默认情况下,第一次访问servlet对象时。

只调用1次。

init方法(有参):

创建完servlet对象后调用。

注意:

会调用无参的init方法。

service方法:

servlet提供服务的方法。

每次发出请求调用。

request对象,response对象

destroy方法:

tomcat服务器停止或web应用重新部署,servlet对象销毁,destroy方法被调用。

2)ServletConfig对象

获取servlet的初始化参数:

getInitParameter("

name"

);

getInitParameterNames();

3)ServletContext对象

得到web应用路径:

context.getContextPath();

request.getContextPath();

等价于上面的代码

得到web应用参数:

context.getInitParameter("

name"

context.getInitParameterNames();

域对象:

context.setAttribute("

Object):

保存数据

context.getAttribute("

)得到数据

context.removeAttribue("

)清除数据

转发

context.getRequestDispatcher("

路径"

).forward(request,response);

request.getRequestDispacher("

得到web应用中的资源文件

context.getRealPath("

context.getResourceAsStream("

今天的目标:

会话管理

2.会话管理入门

2.1生活中会话

我:

小张,你会跳小苹果码?

小张:

会,怎么了?

公司年会上要表演节目,你教教我把

没问题,一顿饭而已。

OK。

在这次生活中的会话中产生通话记录(会话数据)

2.2软件中的会话

一次会话:

打开浏览器->

访问一些服务器内容->

关闭浏览器

登录场景:

打开浏览器->

浏览到登陆页面->

输入用户名和密码->

访问到用户主页(显示用户名)

修改密码(输入原密码)

修改收货地址

.......

问题:

在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢?

购物场景:

浏览商品列表->

加入购物车(把商品信息保存下来)->

打开浏览器->

直接进入购物车->

查看到上次加入购物车的商品->

下订单->

支付

在购物会话过程中,如何保存商品信息?

会话管理:

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

域对象:

实现资源之间的数据共享。

request域对象

context域对象

输入“张三”(保存数据:

context.setAttribute("

"

张三"

))->

用户主页(显示“张三”)

小李:

输入“李四”(保存数据:

context.setAttribute("

李四"

用户主页(显示“李四”)

问题:

context是所有用户公有的资源!

会覆盖数据。

输入“张三”(保存数据:

request.setAttribute("

))->

用户主页(显示“张三”)问题:

一定要使用转发技术来跳转页面!

解决办法:

可以使用session域对象来保存会话数据!

2.3会话技术

Cookie技术:

会话数据保存在浏览器客户端。

Session技术:

会话数据保存在服务器端。

3Cooke技术

3.1特点

3.2Cookie技术核心

Cookie类:

用于存储会话数据

1)构造Cookie对象

Cookie(java.lang.Stringname,java.lang.Stringvalue)

2)设置cookie

voidsetPath(java.lang.Stringuri):

设置cookie的有效访问路径

voidsetMaxAge(intexpiry):

设置cookie的有效时间

voidsetValue(java.lang.StringnewValue):

设置cookie的值

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

voidresponse.addCookie(Cookiecookie):

发送cookie

4)服务器接收cookie

Cookie[]request.getCookies():

接收cookie

3.3Cookie原理

1)服务器创建cookie对象,把会话数据存储到cookie对象中。

newCookie("

value"

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

response.addCookie(cookie);

举例:

set-cookie:

name=eric(隐藏发送了一个set-cookie名称的响应头)

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

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

cookie:

name=eric(隐藏带着一个叫cookie名称的请求头)

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

request.getCookies();

3.4Cookie的细节

1)voidsetPath(java.lang.Stringuri):

设置cookie的有效访问路径。

有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

2)voidsetMaxAge(intexpiry):

设置cookie的有效时间。

正整数:

表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。

负整数:

表示cookie数据保存浏览器的内存中。

浏览器关闭cookie就丢失了!

零:

表示删除同名的cookie数据

3)Cookie数据类型只能保存非中文字符串类型的。

可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

3.5案例-显示用户上次访问的时间

3.6案例-查看用户浏览器过的商品

4Session技术

4.1引入

Cookie的局限:

1)Cookie只能存字符串类型。

不能保存对象

2)只能存非中文。

3)1个Cookie的容量不超过4KB。

如果要保存非字符串,超过4kb内容,只能使用session技术!

Session特点:

会话数据保存在服务器端。

(内存中)

4.2Session技术核心

HttpSession类:

用于保存会话数据

1)创建或得到session对象

HttpSessiongetSession()

HttpSessiongetSession(booleancreate)

2)设置session对象

voidsetMaxInactiveInterval(intinterval):

设置session的有效时间

voidinvalidate():

销毁session对象

java.lang.StringgetId():

得到session编号

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

voidsetAttribute(java.lang.Stringname,java.lang.Objectvalue):

java.lang.ObjectgetAttribute(java.lang.Stringname):

获取数据

voidremoveAttribute(java.lang.Stringname):

清除数据

4.3Session原理

问题:

服务器能够识别不同的浏览者!

现象:

前提:

在哪个session域对象保存数据,就必须从哪个域对象取出!

浏览器1:

(给s1分配一个唯一的标记:

s001,把s001发送给浏览器)

1)创建session对象,保存会话数据

HttpSessionsession=request.getSession();

--保存会话数据s1

浏览器1的新窗口(带着s001的标记到服务器查询,s001->

s1,返回s1)

1)得到session对象的会话数据

HttpSessionsession=request.getSession();

--可以取出s1

新的浏览器1:

(没有带s001,不能返回s1)

--不可以取出s2

浏览器2:

--不可以取出s3

代码解读:

HttpSessionsession=request.getSession();

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

newHttpSession();

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

Cookiecookie=newCookie("

JSESSIONID"

sessionID);

response.addCookie(cookie);

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

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

if(找到){

returnmap.get(sessionID);

}

Map<

String,HttpSession>

]

<

"

s001"

s1>

s001,"

s2>

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

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

结论:

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

4.4Sesson细节

1)java.lang.StringgetId():

2)两个getSession方法:

getSession(true)/getSession():

创建或得到session对象。

没有匹配的session编号,自动创建新的session对象。

getSession(false):

得到session对象。

没有匹配的session编号,返回null

3)voidsetMaxInactiveInterval(intinterval):

session对象销毁时间:

3.1默认情况30分服务器自动回收

3.2修改session回收时间

3.3全局修改session有效时间

<

!

--修改session全局有效时间:

分钟-->

<

session-config>

<

session-timeout>

1<

/session-timeout>

/session-config>

3.4.手动销毁session对象

voidinvalidate():

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

/**

*手动发送一个硬盘保存的cookie给浏览器

*/

Cookiec=newCookie("

session.getId());

c.setMaxAge(60*60);

response.addCookie(c);

总结:

1)会话管理:

浏览器和服务器会话过程中的产生的会话数据的管理。

2)Cookie技术:

response.addCookie(coookie)

request.getCookies()

3)Session技术

request.getSession();

setAttrbute("

会话数据"

getAttribute("

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1