jsp内置对象-session对象
一、session概述
隐含对象session是javax.servlet.http.HttpSession接口实现类的对象,用于保存用户的状态信息。
在web开发中,服务器为每个用户浏览器创建一个会话对象,即session对象。默认情况下,一个浏览器独占一个session对象。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其他程序时,其他程序可以从用户的session中取出该用户的数据,为用户服务。
session用来分别保存每一个用户的信息,使用session可以轻易地识别每一个用户,然后针对每一个用户的要求,给予正确的响应。在某些应用程序中,服务器需要不断识别是从哪个客户端发送来的请求,以便针对用户的状态进行相应的处理。因此,网上购物时最常用的就是session,当用户把物品放入购物车时,就可以将用户选定的商品信息存放在session中,当需要进行付款等操作时,又可以将session中的信息取出来。
session对象的常用方法:
二、存储客户端信息
session对象维护着客户端用户和服务器端的状态,保存着用户与服务器整个交互过程中的信息,这个对象在用户关闭浏览器或session超时前一直有效。
项目ch04案例:使用seeion对象保存客户端信息
step1:创建login.jsp
step2:创建session.jsp
step3:创建message.jsp
结果:http://localhost:8080/ch04/login.jsp
三、销毁session
session对象销毁后,不可以再调用session对象,否则会报session already invalidate异常。
关闭浏览器时,只会使存储在客户端浏览器中的session cookie失效(即将存储的属性值清空),而不会使服务器端的session对象失效。
销毁isession的三种方式:
(1)通过session对象的invalidate()方法,语法格式为:session.invalidate();
(2)session Id的时间间隔,超过了session的最大有效时间,session就会消失。
(3)服务器进程停止,session失效。
四、session跟踪---URL重写
session跟踪概念:http协议只负责请求与响应,却并不关心客户端的请求是否来自相同的客户端。而在jsp中采用session跟踪来辨别客户端。一般session跟踪有URL重写、表单隐藏字段、Cookie和HttpSession。
URL重写:在URL地址后面添加一些数据来标识session,服务器就可以将session和这些数据关联起来。
优点:即使浏览器不支持cookie或用户禁用了cookie,也可以使用。
缺点:该情况数据长度受限制,容易暴露数据,安全上存在隐患。
项目ch04案例:
创建urlsession.jsp:
结果:http://localhost:8080/ch04/urlsession.jsp
本案例中,通过在URL中添加参数,在JSP页面中通过request对象的getParameter()方法获取参数,从而实现session的跟踪。
五、session跟踪---表单隐藏字段
1、详述表单隐藏字段:一个web服务器可以发送一个HTML表单隐藏字段,以及一个唯一的session会话ID,每次当web浏览器发送请求时,session_id值可以用于保护不同的web浏览器的跟踪。
2、语法格式:<input type="hidden" name="session" value="......">
type属性:hidden表示该字段为隐藏字段,不会在浏览器中显示。当表单被提交时,其name属性和value属性的值被包含在get或post数据中。
缺点:当用户查看源代码时,可以看到隐藏字段的属性值,存在安全漏洞。
项目ch04案例:
创建sessionhidden.jsp
创建formAction.jsp
结果:http://localhost:8080/ch04/sessionhidden.jsp
六、Session跟踪---Cookie
1、Cookie概念:Cookie是一种web服务器通过浏览器在访问者的硬盘上存储信息的手段。
当用户再次访问某个站点时,服务器将要求浏览器查找并返回先前发送的Cookie信息,从而识别这个用户。
2、Cookie的目的:方便用户以及向服务器端传送相关信息。
Cookie不能用来做任何方式的运行或解释,因此也无法被病毒利用或以其他方式被用于攻击系统。
3、 作用:用来保存用户的识别信息。
浏览器一般只能为每个站点接收20个Cookie,总计Cookie不能超过300个,每个Cookie被限制在4KB以内,故不用担心Cookie会占满磁盘空间,也不用担心它们会被用于运行某些服务器所禁止的攻击。
4、语法:Cookie(String name,String value)
Cookie具体实现过程:通过response对象提供的addCookie()方法,将Cookie传送到客户端。若需要读取Cookie,则调用request对象的getCookies()方法,该方法返回Cookie对象的数组,遍历数组,通过getName()方法找到与期望名称相符的Cookie,然后再调用getValue()方法获得该Cookie的值。
5、使用Cookie实现session跟踪
项目ch04案例:
创建cookie.jsp
创建cookieAction.jsp
结果:http://localhost:8080/ch04/cookie.jsp
重点:若用户名为中文,则会报错,有哪位大神可以帮忙解决一下:
七、HttpSession对象
1、概念:Servlet提供了使用HttpSession接口来实现session跟踪,它是建立在Cookie和URL重写之上的高级接口。使用Cookie的前提是浏览器支持Cookie,若浏览器不支持Cookie或者Cookie被禁用,则使用URL重写,而使用URL重写需要添加附属信息,存在很大的安全漏洞,但使用Servlet不存在这样的问题,Servlet会自动提供数据的存储空间并将其和session关联起来。
Servlet可以查询到session对象并将其关联到当前request对象、创建新的session对象、查询与session相关联的信息、在session中存储信息和销毁session。
项目ch05案例:使用servlet程序实现session跟踪
step1:创建继承HttpServlet的Servlet,在类中使用HttpSession接口实现session跟踪
step2:修改创建Servlet时,创建的web.xml
结果:
案例解析:在本案例中,使用创建的Servlet类来实现session跟踪,并在web.xml中配置访问Servlet的地址等信息。Servlet可以捕获很多session相关信息。