【程序编程相关:JAVA/JSP学习系列之六(MySQL】
作 者 : 仙人掌工作室【推荐阅读:JSP语法(2)——隐藏注释】
http协议的“无状态”(stateless)特点带来了一系列的问题.特别是通过在线商店购物时,服务器不能顺利地记住以前的事务就成了严重的问题.它使得“购物篮”之类的应用很难实现:当我们把商品加入购物篮时,服务器如何才能知道篮子里原先有些什么?即使服务器保存了上下文信息,我们仍旧会在电子商务应用中遇到问题.例如,当用户从选择商品的页面(由普通的服务器提供)转到输入信用卡号与送达地址的页面(由支持ssl的安全服务器提供),服务器如何才能记住用户买了些什么? 【扩展信息:JAVA/JSP学习系列之一(JDK安装】
10.1 会话状态概述这个问题一般有三种解决方法:
cookie.利用http cookie来存储有关购物会话的信息,后继的各个连接可以查看当前会话,然后从服务器的某些地方提取有关该会话的完整信息.这是一种优秀的,也是应用最广泛的方法.然而,即使servlet提供了一个高级的.使用方便的cookie接口,仍旧有一些繁琐的细节问题需要处理:
从其他cookie中分别出保存会话标识的cookie. 为cookie设置合适的作废时间(例如,中断时间超过24小时的会话一般应重置). 把会话标识与服务器端相应的信息关联起来.(实际保存的信息可能要远远超过保存到cookie的信息,而且象信用卡号等敏感信息永远不应该用cookie来保存.) 改写url.你可以把一些标识会话的数据附加到每个url的后面,服务器能够把该会话标识与它所保存的会话数据关联起来.这也是一个很好的方法,而且还有当浏览器不支持cookie或用户已经禁用cookie的情况下也有效这一优点.然而,大部分使用cookie时所面临的问题同样存在,即服务器端的程序要进行许多简单但单调冗长的处理.另外,还必须十分小心地保证每个url后面都附加了必要的信息(包括非直接的,如通过location给出的重定向url).如果用户结束会话之后又通过书签返回,则会话信息会丢失. 隐藏表单域.html表单中可以包含下面这样的输入域:<input type="hidden" name="session" value="...">.这意味着,当表单被提交时,隐藏域的名字与数据也被包含到get或post数据里,我们可以利用这一机制来维持会话信息.然而,这种方法有一个很大的缺点,它要求所有页面都是动态生成的,因为整个问题的核心就是每个会话都要有一个唯一标识符. servlet为我们提供了一种与众不同的方案:httpsession api.httpsession api是一个基于cookie或者url改写机制的高级会话状态跟踪接口:如果浏览器支持cookie,则使用cookie;如果浏览器不支持cookie或者cookie功能被关闭,则自动使用url改写方法.servlet开发者无需关心细节问题,也无需直接处理cookie或附加到url后面的信息,api自动为servlet开发者提供一个可以方便地存储会话信息的地方.10.2 会话状态跟踪api
在servlet中使用会话信息是相当简单的,主要的操作包括:查看与当前请求关联的会话对象,必要的时候创建新的会话对象,查看与某个会话相关的信息,在会话对象中保存信息,以及会话完成或中止时释放会话对象.
... 下一页