当前位置: 代码迷 >> Web前端 >> 第九周周刊
  详细解决方案

第九周周刊

热度:310   发布时间:2012-11-16 14:12:15.0
第九周周报

河软CSDN乐知学院

学员周学习总结

  姓名

**

周次

 9

方向

Java

本周学习知识点:

会话

Cookie

Session

本周学习收获:

l 什么是会话?

在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

l 会话过程中要解决的一些问题?

? 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据。

保存会话数据的两种技术:

l Cookie

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

l Session

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

Cookie介绍

l Cookie是一种在客户端保持HTTP状态信息的技术,它好比商场发放的优惠卡。

l Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。

l 一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这个Cookie回传给WEB服务器。

l WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。

 

CookieAPI

l javax.servlet.http.Cookie类用于创建一个Cookieresponse接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的CookieCookie类的方法:

ü public Cookie(Stringname,String value)

ü setValuegetValue方法

ü setMaxAgegetMaxAge方法

ü setPathgetPath方法

ü setDomaingetDomain方法

ü getName方法

Set-Cookie:username=qiujy;Domain=localhost;path=/

Cookie:username=qiujy;$Path=/jsp_04_servlet

 

Cookie细节

l 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

l 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie

l 浏览器一般只允许存放300Cookie,每个站点最多存放20Cookie,每个Cookie的大小限制为4KB

l 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie

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

Session

什么是Session

l 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。

l Session技术是一种将会话状态保存在服务器端的技术,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式。

l 客户端需要接收、记忆和回送 Session的会话标识号,Session可以且通常是借助Cookie来传递会话标识号。

 

Session的跟踪机制

l Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。

l HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。

l WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的HttpSession对象。

l WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。

l WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内存之中,该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。

l HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中,还定义了一个getAttribute方法来检索存储在HttpSession对象中的对象,存储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。

Session的超时管理

l WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之对应的HttpSession对象。

l 随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会因此积累起大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。

l WEB服务器采用超时限制的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,WEB服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的HttpSession对象变成垃圾。

l 如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。

l 会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。

<session-config>

<session-timeout>30</session-timeout>

</session-config>

注意

l WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

l SessionCookie的主要区别在于:

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

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

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

IE禁用Cookie后的session处理

l 实验演示禁用Cookieservlet共享数据导致的问题。

l 解决方案:URL重写

? response. encodeRedirectURL(java.lang.String url)

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

? response.encodeURL(java.lang.String url)

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

l 附加:

? Session的失效

? Web.xml文件配置session失效时间

 

学习总结:

学习理解会话的概念,利用CookieSession制作完成小项目,登陆,购物等

对授课教师意见建议:

希望老师能带领我们学习实战开发项目,让我们能更好的体会学习。

 

 

  相关解决方案