《JSP2.0 技术手册》读书笔记二-HttpSession
Internet通讯协议分为两类:Stateful与Stateless,根据连接状态是否持续来区分。Telnet与FTP属于stateful协议,客户端与服务端保持一个持续性的联机来传达各种操作。Http是stateless协议,客户端发出一次请求,服务端建立一个连接,请求得到响应后,连接中断。
通常的应用都是利用http协议来进行通信,服务端要想把用户的状态或者其他信息与一个客户端联系起来,即确定是这次请求依然是哪个客户端传过来的,如要实现购物车功能,那么就需要进行会话追踪了。会话追踪有如下办法:
(1). 在页面中建立含有数据的隐藏表单字段。如<input type="hidden" name="username" value="Jack" />。但不安全,可以通过查看页面源代码的方法看到具体数据。
(2). 重写URL,即在URL后加额外的参数。如http://www.test.com/hello.jsp?userid=123&pwd=123,不安全而且url长度是有限制的。
(3). 使用持续cookie。服务端生成,发送给客户端,客户端以key/value的形式将信息存在本地的一个小文本文件中即cookie,下次请求同一网站时将该cookie发送给服务端。但隐私问题、广告等,也容易被客户限制使用。
(4). HttpSession,会话对象。javax.servlet.http.HttpSession。用于对无状态的http协议下越过多个请求页面来维持状态和识别用户。它是内置的隐含对象,在jsp中可以直接使用session对象。
生命周期:当用户向服务端发送第一个请求时,建立一个HttpSession对象session,当session超时或者用户显式结束时销毁。一般session在一段时间没有作用就会自动失效。对于同一个应用,有多少个不同的用户连接,servlet容器就会产生多个httpsession对象,即一个用户对应一个session。也可在web.xml中手动设置session的过期时间。
另外还可以用HttpSession的方法来控制session的销毁。如下:
session使用:
1. 获得HttpSession对象。在jsp页面中直接使用session;servlet中从请求中提取HttpSession对象-HttpServletRequest.getSession()或HttpServletRequest.getSession(boolean create),效果都是返回与这个请求关联的当前有效的session。没有参数,那么当没有有效session时就会新建一个session。带布尔参数时,若为true,当没有有效session时建立session;若为false,没有有效session时返回空值。
2. 存取属性。各方法的作用正如其名字所述。