基于Servlet的会话跟踪
2017-09-21 13:10
387 查看
会话
会话概念 本义是指有始有终的一系列动作、消息 也可指从一个浏览器窗口打开到关闭这个期间 也可以表示客户端浏览器与服务器之间一系列交互的动作 也能指一类用来在客户端与服务器之间保持状态的解决方案(HttpSession)
会话跟踪机制
1、session 服务端会话跟踪 常用 2、cookie 客户端会话跟踪 比较常用 3、url重写。 解决客户端禁用cookie的问题。但是我们开发时默认用户是启用cookie。基本不用。 4、隐藏表单域 上古解决方案、现代已经不用了。
cookie 使用
1、cookie的属性 int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。 String getName() 返回Cookie的名字。名字和值是我们始终关心的两个部分 getName/setName。 String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。 String getValue() 返回Cookie的值。getValue/setValue。 int getVersion() 返回Cookie所遵从的协议版本。 void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。 void setPath(String uri) 指定Cookie适用的路径。 void setValue(String newValue) cookie创建后设置一个新的值。 void setVersion(int v) 设置Cookie所遵从的协议版本。 2、通过使用setMaxAge(int expiry)方法设置Cookie的存在时间,及删除Cookie,参数expiry应是一个整数: 1、正值表示cookie将在这么多秒以后失效。注意这个值是Cookie将要存在的最大时间,而不是Cookie现在的存在时间。 2、负值表示当浏览器关闭时,Cookie将会被删除。 3、零值则是要删除该Cookie。 示例: Cookie deleteNewCookie=new Cookie("newcookie",null); deleteNewCookie.setMaxAge(0); //删除该Cookie response.addCookie(deleteNewCookie); 3、获取客户端cookie JSP将调用request.getCookies()从客户端读入Cookie,调用getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象数组。循环访问该数组的各个元素,调用getName方法检查各个Cookie的名字,直至找到目标Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值 示例: Cookie myCookie[]=request.getCookies();// 读取客户端Cookie对象数组 // 设立一个循环,来访问Cookie对象数组的每一个元素 for(int n=0;n< myCookie.length;i++){ Cookie newCookie= myCookie ; // 判断元素的值是否为username中的值 if(newCookie.getName().equals("username")){ System.out.println(newCookie.getValue()); } } 4、分发cookie到客户端。(Cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的Cookie) //cookie无法直接存储中文、要转码。 String timerUtf8 = URLEncoder.encode(timer,"utf-8");//将字符串timer格式化成网络格式 utf-8编码 //将用户名记录在客户端会话对象cookie中 Cookie cookie = new Cookie("username", un); //一年之内访问该网站不用输入用户名 cookie.setMaxAge(60*60*24*365); //分发给客户端 response.addCookie(cookie); 5、 读取cookie中的信息 Cookie[] cookies = request.getCookies(); 注意:第一次访问网站时cookie的非空处理。
Servlet中的会话跟踪(session)
1、Servlet提供一种出色的会话跟踪解决方案:HttpSession接口下的session2、常用方法:
getCreationTime():返回创建Session的时间。
getId():返回分配给这个Session的标识符。
getLastAccessedTime():返回客户端最后一次发出与这个Session有关的请求的时间,如果这个Session是新建立的,返回-1。
getMaxInactiveInterval():返回一个秒数,这个秒数表示客户端在不发出请求时,Session被Servlet引擎维持的最长时间。在这个时间之后,Session可能被Servlet引擎终止。如果这个Session不会被终止,这个方法返回-1。
getValue(String name):返回一个以给定的名字绑定到Session上的对象。如果不存在这样的绑定,返回空值。
getValueNames():以一个数组返回绑定到Session上的所有数据的名称。
invalidate():这个方法会终止这个Session。所以绑定在这个Session上的数据都会被清除。
3、Servlet中会话跟踪步骤
访问与当前请求相关联的会话对象。
调用request.getSession()方法获取HttpSession对象,该对象是一个简单的散列表,用来存储用户服务的相关数据。
查找与会话相关联的信息。
调用HttpSession对象的getAttribute(java.lang.String arg0),得到该参数名称的返回值,并将返回值转换成恰当的类型。
存储会话中的信息
使用setAttribute(java.lang.String arg0,java.lang.Object arg1),设置需要存储的值以及相应的参数名称。
废弃会话数据。
调用removeAttribute(java.lang.String arg0)删除指定的参数名称和参数值。调用invalidate方法删除整个会话。
4、会话超时
1、HttpSession类的setMaxInactiveInterval方法为每个单独的session对象设置失效时间
2、在web.xml中使用session-config和session-timeout元素显式指定在所有服务器上session失效时间
<session-config> <session-timeout>180</session-timeout> </session-config>
3、两者区别
session-timeout子元素定义的时间值单位是分钟,然而setMaxInactiveInterval定义的值单位是秒。
如果 session-timeout指定的值是0或负数,session将不会失效,但是setMaxInactiveInterval方法要达到同样的结果,只能设置负数
session和cookie的区别
1、cookie数据存放在客户的浏览器上、将用户的数据写到WEB服务器中该用户独占的session中。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗、 考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多、会比较占用你服务器的性能、考虑到减轻服务器性能方面、应当使用COOKIE。
4、单个cookie保存的数据不能超过4K、很多浏览器都限制一个站点最多保存20个cookie。
建议:
将登陆信息等重要信息存放为SESSION。
其他信息如果需要保留、可以放在COOKIE中。
相关文章推荐
- 教案:《开发基于JSPServletJavaBean的网上交易系统》教案—第3章 基于Servlet的会话跟踪(一)
- 教案:开发基于JSPServletJavaBean的网上交易系统-第4章 基于Servlet的会话跟踪(二)
- JavaEE——基于Servlet的会话跟踪(一)
- JavaEE——基于Servlet的会话跟踪(二)
- 基于Servlet的会话跟踪(一)
- JSPServlet会话跟踪机制
- Servlet--会话跟踪
- JSP/Servlet会话跟踪的四种方法
- servlet的会话跟踪
- Servlet总结03——会话跟踪
- 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决办法
- Servlet的会话跟踪
- Servlet的会话(Session)跟踪
- 2011-10-19 Config、context、Servlet线程和会话跟踪
- Servlet的自我理解之6:ID会话跟踪技术的实现
- 基于JsessionId的会话跟踪登录设计与实现
- 基于Cookies的会话跟踪技术
- jsp/servlet:servlet/jsp会话跟踪机制
- Servlet会话跟踪技术
- servlet会话跟踪