会话跟踪技术

由于HTTP事务是无状态的,因此必须采取特殊措施是服务器在系列事务期间能继续确定和记住特定用户。
实现此功能有两种基本方式:
一是让客户端记住所有会话的相关数据并在必要时发回到服务器
二时服务器保持所有数据,对其设置一个标识,让客户端记住该标识
第二种方法更好,实现它的技术有四种:
用隐藏字段(<input type="hidden">):非常适合不需要大量数据存储的会话应用。
具体使用??
URL重写:URL可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。如:http://server/mypage.jsp?name1=value1&name2=value2.JSP 页面检索请求时,可以如下读取参数值,String value1=request.getParameter("name1");String value2=request.getParameter("name2");。此技术可以确保所有浏览器中有效,但是保存大量数据,此技术会降低性能。而且这样的URL是不安全的,不过对于简单应用,URL重写是可信赖的,也很容易实现。注意,通常不会手工向超级链接URL中附加参数,更常见的是使用 HTTP会话API执行URL重写,这样,只要附加一个会话ID。
Cookie:一个Cookie是一个小的,已命名数据元素。服务器使用SET-Cookie头标将它作为HTTP响应的一部分传送到客户端,客户端被请求保存Cookie值,在对同一服务器的后续请求使用一个Cookie头标将之返回到服务器。与其它技术比较,Cookie的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。
具体使用方法??
Session:
使用setAttribute(String str,Object obj)方法将对象捆绑到一个会话(在会话中可以保存任意类型的对象,但因为会话可能被序列化,最好让会话对象实现java.io.Serializable接口;
使用getArrtibute(String str)方法从一个会话中检索对象;
使用removeAttribute(String str)方法从一个会话中销毁对象;

  使用setMaxInactiveInteral()方法设置会话的有效期,默认为30分钟(在web.xml中配置);

  使用invalidate()方法将会话所有捆绑的对象解缚。

一.简介
1.理解 
1)会话:当前浏览器与服务器间多次的请求、响应关系,被称作一个会话
2)会话跟踪:借助于会话跟踪技术,能将同一会话中一系列请求和响应过程关联起来,使它们之间可以相互依赖和传递信息 


2.会话跟踪原理的工作流程如下:
1)客户端第一次 访问WEB服务器时,服务器为该客户创建一个会话,并产生唯一的SessionID。
2)服务器响应客户端,将SessionID回传给客户端。
3)客户端再次向WEB服务器发出请求时,附带SessionID。服务器根据SessionID来标识唯一客户端。
3.会话跟踪实现的4种方式
1)Session技术:Web服务器为客户端开辟的一块存储空间,用来存放状态信息
2)Cookie技术:Cookie是一小段文本信息,伴随着用户请求在WEB服务器和浏览器之间传递,Cookie存放于客户端
3)表单隐藏域技术:通过表单隐藏域来存储数据
4)URL重写技术:URL重写技术在URL结尾添加一些附加数据以标识该会话。
二。Session技术
1.理解:Session是一种保存上下文信息的机制,它针对每一个用户在服务器端开辟一块存储空间,存放用户的会话状态,通过SessionID区分不同的客户 
注意:
1)一个session关联一个浏览器对象
2)session对象存储在服务器端,而sessionid存储在客户端浏览器中
3)session中的数据只能被某个客户访问,不能被所有的客户共享
2.会话的开始和结束
1)开始:客户端第一次请求被响应时,就创建session对象,开始会话
2)结束:当服务器检查到在某个时间段不在有该会话的请求(即为“超时”)就主动结束本次会话(销毁对应的session对象)
注意:当客户端关闭浏览器时,不会马上结束会话。而是要等到超时,服务器才主动结束本次会话
3.HttpSession对象的创建
1)方法一:HttpSession session=request.getSession();
//总是可以返回对象
2)方法二:HttpSession session=request.getSession  (false);//当不存在会话时,返回null
注意:request.getSession()等价于request.getSession(true);
4.示例
1)示例1:实现必须登录才可以访问主页面
2)示例2:模拟简单购物车


三。Cookie技术
1.理解:是服务器发送给客户的片段信息,存储在客户端浏览器的内存或硬盘中,之后在对服务器的请求中发回它。
注意:存放在浏览器内存中的叫临时Cookie;存放在硬盘中叫永久Cookie
2.使用
1)使用Cookie保存数据
Cookie cookie=new Cookie("属性名","属性值");
//设置生命期,将其变成永久Cookie
cookie.setMaxAge(365*24*3600);
response.addCookie(cookie);//将Cookie添加到响应中


2)使用Cookie读取值
//获取客户端中所有的Cookie集合
Cookie []cookies=request.getCookies();
//循环遍历,找到目标
for(Cookie cookie:cookies)
{
     if("目标名称".equals(cookie.getName())
     {
           //调用getValue取出值
           ........
     }
}


3.示例
1)统计同一个客户端访问的次数




四。URL重写
引入:默认情况下,客户端是用Cookie保存Session的id号,而Cookie安全性不够,当客户端禁用Cookie,那么不能直接保存id号,会话跟踪就会失效。而URL重写就是用来解决此问题。
1.具体实现方法
HttpServletResponse接口定义两个用于自动完成URL重写的方法
1)
public String encodeURL(string url)
用于对超链接和form表单的action属性的URL进行自动URL重写
2)
public String encodeRedirectURL(String url)
用于对需要传递给HttpServletResponse接口中的sendRedirect()方法的URL进行自动URL重写 
注意:
两种方法都是首先判断客户请求消息中是否包含Cookie字段,如果没有,表示客户端不支持Cookie,它会将会话ID作为JSESSIONID参数值拼接到URL末尾;如果有,则不会附加JSESSIONID参数值 


2.示例:


五。隐藏域
1.理解:实质就是一个看不见的文本框
2.实现过程:隐藏域是用于收集或发送信息的不可见元素。当表单提交时,隐藏域会将信息用事先设置时定义的名称和值发送给服务器 
3.示例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值