会话跟踪技术servlet,cookie,URL重写,隐藏表单域

servlet(会话域)

会话:

Web应用中的会话 指的是一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程

会话状态:

Web服务器和浏览器在会话的过程中产生的状态信息

作用:

借助会话的状态,web服务器能够把同一个会话中的一系列的请求和响应过程关联起来,使得他们之间可以相互依赖和传递信息

创建会话:

HttpservletRequest 中建立会话:

HttpSession getSession()
是否之前有建立Session,如果没有,创建一个Session,如果有,使用当前Session

HttpSession getSession(boolean create)
是否之前有建立Session,如果有,使用当前Session
如果没有,看参数值:
true 创建一个新的session
false 不创建,返回null

HttpSession 常用方法

HttpServlet常用方法:

boolean isNew()  // 判断该会话是否是一个新创建的Session

long getCreationTime()   //获取该Session创建的时间 毫秒值 1/1/1970 

java.lang.String getId()   //Session的ID值,不重复

long getLastAccessedTime()  // 获得最后一次访问此会话的时间  毫秒值 1/1/1970 

int getMaxInactiveInterval()   //获取会话超时的最大时间值  秒值

java.lang.Object getAttribute(java.lang.String name)

void setAttribute(java.lang.String name,java.lang.Object value)

实现现有状态的会话:

HTTP协议是一种无状态的协议:浏览器主动发出一个请求,web服务器被动的回应一个结果。不会保留客户的任何信息。

服务器接收到某个浏览器的访问请求,无法确定该浏览器之前所访问的请求信息。

使用会话ID(SessionID)来标识每次请求信息以实现由状态的会话

什么是cook:

在浏览器访问Web服务器的某个资源的时候,由Web服务器在HTTP响应消息头中附带传给浏览器的一段数据
浏览器可以决定是否保存这段数据
一旦数据保存,在以后每次访问该web服务器的时候,都会在HTTTP请求都中将这段数据传给Web服务器

cook构造方法:

构造方法:

public Cookie(java.lang.String name,java.lang.String value)

普通方法:

getName();

getValue()/setValue(String value);

getMaxAge() / setMaxAge(int age)

setPath(String uri)

URL重写原理:

 当服务器程序调用request.getSession();代码时,其会先看 request.getCookies()方法中有没有名为JSESSIONID的cookie带过来,如果没有,就看URL有没有被重写(即附带 JSESSIONID),如果有,则从服务器中找key为JSESSIONID的session对象,如果都没有,则创建一个新的session。如果用户禁用了cookie,则只能通过URL重写方式实现会话跟踪!其类似于get方式将信息追加到url后面。

注意: 

每个页面都必须使用servlet或jsp动态生成(动态页面)。因为附加在URL上的sessionID是动态产生,所以对于静态页面的跳转,URL重写机制无能为力。
即使使用动态页面,如果用户离开了会话并且通过书签或链接再次回来,会话信息也会丢失,因为存储下来的链接含有错误的标识信息。
因此:
  必须将所有发送到客户端的url进行编码,调用HttpServletResponse接口中的encodeURL()方法和 encodeRedirectURL()方法来实现。在调用sendRedirect()方法之前使用encodeRedirectURL()方法。

隐藏表单域:

  只能用于特定操作中。仅当每个页面都由表单提交而动态生成的时候,才可以使用隐藏表单域,用来存储相关会话信息。
  它是一种最简单的方式,将字段隐藏在HTML表单中,但不在客户端显示。比如在第一张页面中输入用户名和密码登陆,服务器生成响应返回第二张页面。当第二张页面提交时可能仍然需要知道来自第一张页面中的用户名。
  那么就可以通过隐藏表单域来实现这一连续的过程。当第一张页面提交后,服务器端作出响应返回第二张页面,此页面中用隐藏域记录了来自登陆时的用户名。通俗说就是当服务器回发给客户端的响应中,就同时把用户名再次回发到客户端,用隐藏域隐藏起来,是不可见的。当第二张页面提交时,此隐藏域中的用户名一并随表单提交。这样服务器就仍然可以判断此用户是否与以前的用户相同。于是,再次处理完结果后继续将响应回发给客户端,且此响应中也仍然包含了用户名,在客户端中仍然用隐藏域将这一信息隐藏。
 


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值