JSP中有4种方式可以实现会话跟踪。
1.建立含有数据的隐藏表单字段
在用户的请求之间跟踪数据的简单方法就是使用HTML表单,其对于在几个表单之间维护少量的数据、使用隐藏的表单字段,既简单,又有效。
为了使用隐藏的表单字段,服务器获取请求数据,并将其放回到下一个页面的表单里。服务器必须每次都这么做,否则,所有数据都会丢失。
使用HTML的隐藏表单(Hidden form)的方法,就是在HTML的<form>里使用<input type="hidden">这个语句。例如:
代码范例7.1是一种使用隐藏域的用法。
代码范例7.1:
使用隐藏表单的缺点:
(1)如果把表单的提交方式设置为Get,将使浏览器窗口显示所有的参数查询信息。这样就容易暴露个人信息,从而造成安全隐患。当然,这个问题也可以解决:把表单的提交方式设置为Post就可以了。
(2)即使将表单的提交方式设置为Post,如果查看HTML文件中的源代码,还是可以看到相应的隐藏表单里的信息数据。
所以,隐藏表单的会话追踪功能只能应用于简单的信息传递。
2.URL重写
URL重写(URL Rewriting)方法,实际上就是重新调用URL的方式。它将原来的URL加上查询参数,并显示上一次请求的信息。
如果是通过URL重写方式实现会话跟踪,一般显示的URL如下所示:
以上的URL中,“uid=jsp&book=jspProgramming”表示产生字符串。文件所在路径和查询参数通过 “?”连接,而多个查询参数则通过 “&”标识。
代码范例7.2是一种使用URL重写的用法。
代码范例7.2:
虽然URL重写方式简单且相对容易理解,但是,它有也有缺陷:
(1)要传递的查询信息被直接显示在浏览器的地址栏。因此,涉及个人隐私的信息,就不能应用URL重写方法。
(2)URL的长度是有限的,如果要传递的内容非常多,这种方式就显得非常麻烦,很多情况下没有办法传递数据。(www.xing528.com)
正因为以上原因,URL重写方法应用于极少的场合,一般重要的模块都不会用这种方法进行数据的传送。
3.Cookie
当服务器响应浏览器的调用时,Cookie就会加入HTTP的Head部分,被传递给浏览器。浏览器读取到这一段后,会根据指定的名称生成一个Cookie。在Cookie生成后,浏览器与服务器进行通信时,会将Cookie值传递给服务器。
以下方法可以创建一个Cookie:
可以设置Cookie的有效时间。例如,以下代码用于设置Cookie的有效时间为7天。以秒为单位。
如果将上面方法中的参数值设置为负数,Cookie将和浏览器同时关闭;如果设置为0,浏览器会把这个Cookie删除。
Cookie的优点是,对于没有经过用户允许的信息,不会被传到服务器。只有经过用户允许,信息才有可能被传递给服务器。
在信息安全日益重要的今天,用户为了不使自己的个人信息泄露,常常将浏览器的Cookie功能关闭。但是,如果关闭Cookie功能,将会使很多互联网上的服务无法完成。
当然,Cookie也有缺点。由于Cookie以纯文本形式存储到机器中,因此别人也可以打开这个文件进行阅读,这样就会引发安全问题。不过如果这台机器只是用户本人使用,就不会有这个问题。
4.Session
Session ID就是一个值,它表示服务器上保存的状态信息集合的键。当客户给出这个键时,服务器就知道应该使用哪个状态信息集合。只要客户给出这个键,服务器就会跟踪应用的实际状态。
使用Session ID有许多优点:
(1)大多数信息可以被存储在服务器上,不必发送到客户端。
(2)由于状态数据不必随每个应用来回发送,所以应用之间的带宽减少了。
(3)因为在客户和服务器间只需传递Session ID,增强了安全性。
跟踪会话的步骤是:服务器为用户产生一个独一无二的ID,然后服务器通过设置Cookie或者URL重写方法来存储Session ID。通常是使用Cookie,但是,对那些不想使用Cookie的站点,也可以使用URL重写方法来存储Session ID。现在许多JSP引擎有足够的智能,它们会先尝试设置Cookie,如果客户浏览器禁用了Cookie,那么就转而使用URL重写。
接下来创建HttpSession的新实例。可以使用Session ID作为键值来访问新的HttpSession对象。只要客户返回正确的键值,就可以访问HttpSession对象的相同实例。如果存在来自多个用户的请求,那么每个用户都将拥有自己的HttpSession对象,但是只能从他们自己的请求来访问这个对象。
HttpSession对象实际上作为用于存储或获取信息的容器。这个对象可以存储任意数目的其他信息。实际上,任何扩展java.lang.Object的内容都能够被放进HttpSession对象。也就是说,即使是更抽象的数据(包括I/O流和数据库链接),也可以被放进此对象,并与某个客户关联起来。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。