`

Servlet篇之会话跟踪

阅读更多
Servlet之会话跟踪部分
由于http协议是无状态的。所以为了能确定一个特定用户的一些事物操作就需要使用会话跟踪技术。
http协议是请求/响应的模式,即当服务器端完成客户端的请求响应后就断开链接了,http 1.1支持持续链接,但是(keep-alive时间过期)就会断开链接。
会话:服务器应该能标识出特定用户的一些列请求,组成一个单独的会话,将特定的请求与该会话链接起来。购物车和在线银行应用都是基于会话才能完成的。
java Servlet API使用session来跟踪会话和管理会话内的状态,利用session可以把一个用户的一些列请求联系在一起.
session的工作原理:当客户第一次链接到服务器的时候,服务器为其简历了一个session,并分配给用户一个sessionId,通过cookie,使用response对象发送给客户端浏览器缓存里,以后每次请求都要将该标识一起提交,服务器根据标识找出特定的session,用这个session记录用户的状态。
类似例子:去超时购买东西,管理员会给你一个盘,让你把包裹存储在里面,当你每次来时必须把盘给管理员才能取出包裹,不然任务你是新的人,会新给你分配一个盼。
在servlet中支持三种方式的会话跟踪:
1.SSL(secure Socket Layer,安全套接字层)
2.cookies
3.URL重写
SSL跟踪会话
ssl是运行在TCP/IP之上,http协议之下的加密技术。ssl是在https协议中使用的加密技术。ssl可以让采用ssl的服务器采用ssl的客户端,并在客户端与服务器端保持一种加密的链接。在加密链接的过程中会产生”会话密钥“,他说加密,解密消息的对称密钥。
cookies会话跟踪
cookie是有netscape公司发明,是服务器端发给客户端的片段信息,存储在客户端浏览器的内存中活硬盘上。
cookie是基于key和value的。服务器利用响应头Set-Cookie发送cookie信息。
cookie格式:Set-Cookie:NAME=VALUE;Comment=value;Domain=value;Max-Age=value;Path=value;Version=1;
解释:NAME是cookie的名称。comment是cookie的描述。
domain表示哪个域下面可以访问。所指定的域必须以.开头.
Path表示那个服务器路径下可以访问。
Max-Age:表示cookie的存活期,如果超过指定时间,客户端会丢弃该cookie。单位是秒。
Version是必须的。对于RFC2109应该设置的值为1.
在Servlet规范中,cookie的名称必须是JSESSIONID
实例:
Set-Cookie:cartName=wangCar;Max-Age:3600;Domain=.www.baidu.com;Path=/bbs;Version=1
表明在:www.baidu.com域名下的/bbs路径下有效。
Cookie是在响应报头和请求报头中被传递,不能与传送的内容混在一起。
如果客户端拒绝使用cookie就需要使用URL重写来跟踪会话了。
客户端请求时会:发送Cookie:name1=value1;name2=value2的全部cookie
URL重新
Url重写就是URL中嵌入表示客户的SessionID,servlet容器解释URL,取出sessionID,根据sessionID与特定的session相关联。
Session被编码为URL中路径参数,如:
http://www.baidu.com;jsessionid=2345?name=aaa&pass=bbb
,客户端在请求URL中在传递回来,这样服务器就跟踪会话了。
要跟踪会话就要将所有发往客户端的URL进行编码,可以调用HttpServletResponse的encodeURL()方法和encodeRedirectURL()方法实现,encodeRedirectURL()方法主要用于sendRedirect()方法前使用。
session的主要方法
1.Object getAttribute(String name)
2.void removeAttribute(String name)
3.void setAttribute(String name,Object obj)
4.long getCreationTime()
5.String getId()
6.long getLastAccessedTime()
7.int getMaxInactiveInternal()//返回的是毫秒,cookie返回的是秒
8.void setMaxInactiveInternal()
9.public ServletContext getServletContext()返回session所属的ServletContext对象
10.public void invalidate()//让session失效
11.public boolean isNew()

注:显示session最后访问时间返回的long可以使用new java.util.Date(longParameter)显示
在web.xml中配置的
<session-config>
     <session-timeout>5<session-timeout>//这里面的值是以分钟为单位的
</session-config>
注:response.setContentType("text/html;charset=gbk")//MIME码;字符编码
注意:开发人员个人浏览器禁用cookie后,输入localhost,会不起作用,cookie还是会生效。应该使用ip
注意:如果使用URL重写要在所有跳转处都使用encodeURL或是encodeRedirectURL.
如表单提交时都要写上response.encodeURL(url)
在servlet向客户端跳转时要用responseURL(url)
在客户端浏览器请求(包括超链接请求时)也要加上response.encodeURL()

url重写对于静态页面是无能为力的。但是可以将静态页面改成动态页面。
至于客户端是否禁用了cookie,无需自己判断,服务器会判断,如果客户端没有禁用会直接返回URL,如果禁用了会返回URL附加jsessionid
Cookie常用API
1.public Cookie(String name,String value)
2.String getComment()或是setComment(String name)
3.String getDomain()或是setDomain(String domain)
4.int getMaxAge()或是setMaxAge(int )
5.String getName()
6.String getValue()
7.String getPath()或是setPath(String path)
8.int getVersion()或是setVersion(int)
Cookie使用实例
//设置cookie
StringBuffer sb = new StringBuffer();
sb.append("username=a");
sb.append("&password=t");//t是md5加密
Cookie cookie = new Cookie("userinfo",sb.toString());
cookie.setMaxAge(60);
resp.addCookie(cookie);
resp.sendRedirect("welcome")
注意:当cookie的maxAge设置为0时表示浏览器关闭时cookie立即失效。只要设置为正值就会写到磁盘上。
//读取客户端cookie
Cookie[] cookies = req.getCookies();
if(cookies != null && cookies.length>0){
   String name = null;
   String pass = null;
   for(Cookie cookie:cookies){
      String cName = cookie.getName();
      if("userinfo".equals(cName){
           String[] array = cName.split("&");
           for(String str:array){
                String  values = str.split("=");
                if("username".equals(values[0]){
                   name = values[0];
                }
                if("password".equals(values[1]){
                   pass = values[1];
                }
                              
           }
     }
  }
}
//根据用户名和密码查询是否合法,然后做不同的跳转
分享到:
评论

相关推荐

    给予servelet的会话跟踪的PPT

    本篇将深入探讨基于Servlet的会话跟踪技术。 **1. 会话的概念** 会话(Session)是指用户打开浏览器访问网站开始,到关闭浏览器结束的整个过程。在Web应用中,由于HTTP协议本身是无状态的,即服务器无法自动识别...

    JavaWeb会话跟踪技术

    本篇文章将深入探讨JavaWeb中的会话跟踪技术。 首先,最常见的会话跟踪方法是使用Cookie。Cookie是由服务器发送到客户端(浏览器)的一小段数据,然后由客户端在后续的请求中返回给服务器。服务器可以设置Cookie...

    jakarta-servletapi-4-src.zip servlet源码

    Jakarta Servlet API 4.0是Servlet规范的最新版本,它包含了对HTTP协议处理、生命周期管理、会话跟踪、安全性和性能优化等方面的全面增强。本篇文章将围绕jakarta-servletapi-4-src.zip这个源码包,深入剖析Servlet ...

    Servlet

    Servlet API提供了许多工具类,如`RequestDispatcher`用于请求转发和重定向,`Cookie`用于管理客户端的持久性数据,`Session`用于跟踪用户会话。 七、Servlet与JSP的配合 Servlet通常用于处理业务逻辑,而JSP则专注...

    Java Servlet

    Servlet可以使用HttpServletRequest的getSession()方法获取或创建会话,用于跟踪用户状态。Session对象具有生命周期,过期后会自动失效。 七、过滤器与监听器 1. 过滤器(Filter):在请求到达Servlet之前和响应...

    servlet d的使用用必要看看那

    Servlet提供了两种主要的会话跟踪机制:Cookie和Session。Cookie存储在客户端,而Session存储在服务器端。HttpServletRequest的getSession()方法创建或获取Session对象,HttpSession接口提供了管理会话状态的方法。 ...

    深入Java Servlet 网络编程

    Servlet提供了HttpSession接口,用于跟踪用户的会话。通过`session.getAttribute()`和`session.setAttribute()`方法,可以在会话间共享数据。 九、过滤器与监听器 1. 过滤器(Filter):在请求处理前后执行,可以...

    深入Java Servlet网络编程

    会话管理是Web应用中的重要一环,Servlet提供了HttpSession接口,允许开发者跟踪用户的会话状态。安全性方面,可以通过设置Servlet的访问控制限制,实现基于角色的访问控制(RBAC),或者使用HTTPS协议来提高通信的...

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

    SERVLET资源

    6. **SessionTracking.pdf**:专门针对会话跟踪,Servlet中会话管理是重要的功能,涉及Cookie、HttpSession对象的使用,以及跨请求会话保持的策略。 综上所述,这些资源为读者提供了全面的Servlet学习路径,从基础...

    北大青鸟Y2 JSP servlet 上机答案

    4. **会话管理**:Servlet可以创建、检查和移除HttpSession,以便跟踪用户状态。 **JSP与Servlet的关系** JSP和Servlet常一起使用,形成“视图-控制器”模式。Servlet通常作为控制器,负责业务逻辑和数据处理,而...

    Servlet和JSP教程.rar

    4. **会话管理**:使用`HttpSession`对象来跟踪用户会话。 5. **Servlet上下文**:`ServletContext`接口提供整个应用的共享数据和资源。 在JSP方面,你需要掌握: 1. **JSP元素**:包括指令(如`&lt;%@ page %&gt;`, `...

    java servlet帮助文档

    Servlet API提供了`HttpSession`接口,用于管理和跟踪用户的会话状态。 九、异步处理 从Java Servlet 3.0开始,Servlet支持异步处理,允许在不阻塞线程的情况下执行长时间运行的任务。 总结,"Java Servlet帮助...

    jsp+servlet实现最基本的注册登陆功能

    3. **状态管理**:如果登录成功,`servlet`可能会设置会话(session)属性来跟踪用户的登录状态,以便在后续的页面中提供个性化的服务。 4. **响应处理**:根据处理结果,`servlet`将生成合适的响应,可能是一个...

    Servlet API

    会话跟踪常用于保持用户状态,如购物车信息、用户登录状态等。 11. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在`service()`方法中启动异步操作,然后返回控制权给容器,直到异步操作完成再通知...

    深入JavaServlet网络编程

    本篇文章将详细探讨JavaServlet的核心概念、工作原理以及实际应用中的关键知识点。 一、JavaServlet概述 JavaServlet是一种Java API,它为开发人员提供了在服务器端处理HTTP请求和响应的能力。Servlet容器(如...

    servlet实例代码,不得不看

    Servlet可以使用`HttpSession`对象来跟踪用户会话。`getSession()`方法用于创建或获取会话,`setAttribute()`和`getAttribute()`分别用于设置和获取会话属性。 8. **异步Servlet** 自Servlet 3.0版本开始,...

    jsp+servlet完成宿舍管理系统

    2. 会话管理:对于需要用户登录的系统,我们需要使用HttpSession对象来跟踪用户的登录状态。 3. 错误处理:为防止程序出错,应设定异常处理机制,确保程序的健壮性。 4. 安全性:对敏感数据如密码进行加密处理,防止...

    servlet api

    Servlet API提供了HttpSession接口,用于跟踪用户会话。通过session对象,我们可以存储和检索用户特定的数据,即使用户在多个页面之间导航,也可以保持状态。 七、过滤器Filter 除了Servlet,Servlet API还包含了...

Global site tag (gtag.js) - Google Analytics