2、题目要求:(X.jsp,Y.jsp) 增加代码,在网页X.jsp中设置session变量course的值为“移动Web应用设计”+当前时间(new Date()),在网页Y.jsp和网页Z.jsp中可以取出并显示该变量的值。 所有网页都会显示session ID的值。每个网页都有到另两个网页的链接。
HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。
有三种方法来维持客户端与服务器的会话:
COOKIEs
隐藏表单域
重写URL
除了以上几种方法外,JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。
默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面这样:
<%@ page session="false" %>
——参考http://www.runoob.com/jsp/jsp-session.html
首先,充分理解session:
1.http协议是无状态的,但是通过session可以在Web服务器上临时保存少量
变量的状态。 session保存的状态只与当前浏览器相关。在用户第一次访问
页面时Web服务器就会送回sessionId(作为COOKIE)。服务器根据sessionId访
问session变量。
2.通过服务器端语言(JSP, ASP.net, PHP)设置session对象。 一个网站的后台程
序可以利用session 变量在后台(服务器)保留状态。 session与Web服务器
有关,一个Web服务器中设置的session,另一个Web服务器访问不了。
3.如果一个网站的后台程序设置了session变量,当通过浏览器第一次访问该
网站时,服务器脚本语言就会生成一个唯一的session ID,并作为COOKIE传送
到客户端保存。以后每次访问该网站,该session ID都会和其它COOKIE一起送
到服务器。通过session ID服务器端可以找到为该session保存的变量,使得
这些变量可以被不同网页所共享。
4.session的生命周期和浏览器有关,浏览器关闭session将被删除。但是如果
你长时间不关闭浏览器,又不访问该网站, session的生命周期也会结束,
一般是三十分钟。
这里用到的一个session对象的函数原型:
public void setAttribute(String name, Object value) 使用指定的名称和值来产生一个对象并绑定到session中 |
X.jsp的完整代码如下:
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312"
cOntentType="text/html;charset=GB2312"%>
<% session.setAttribute("course", "移动Web应用设计"+ new Date()); %>
<% String id= session.getId(); %>
Session X
sessionID:<%= id%>
Y.jsp
Z.jsp
生成了session对象,course对应的值为
“移动web应用设计”+当前时间,在页面中将sessionID显示出来。
Y.jsp的代码如下:
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312"
cOntentType="text/html;charset=GB2312"%>
<% String course = (String)session.getAttribute("course"); %>
<% String id= session.getId(); %>
Session Y
sessionID:<%= id%>
course:<%= course %>
X.jsp
Z.jsp
可以看到获取到了的sessionID和x.jsp中的sessionID是一样的,
每次访问该网站,该session ID都会和其它COOKIE一起送到服务器。通过session ID服务器端可以找到为该session保存的变量,使得这些变量可以被不同网页所共享。
Z.jsp的完整代码如下:
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312"
cOntentType="text/html;charset=GB2312"%>
<% String course = (String)session.getAttribute("course"); %>
<% String id= session.getId(); %>
Session Z
sessionID:<%= id%>
course:<%= course %>
X.jsp
Y.jsp
效果和Y.jsp是一样的。
仅当再次点击X.jsp(再次设置session对象中的course的值时),Y.jsp和Z.jsp看到的session对象中的course值也是会更新的。
回答问题:
(2)在哪些情况下,该浏览器显示的session ID会发生变化:
重新启动浏览器时。session的生命周期和浏览器有关,浏览器关闭session将被删除。但是如果你长时间不关闭浏览器,又不访问该网站, session的生命周期也会结束,一般是三十分钟。
(3)在不同浏览器中浏览这些网页,session ID是否相同?
都不同
(4)通过上面的实验,你如何说明session的含义?
session保存的状态只与当前浏览器相关。在用户第一次访问页面时Web服务器就会送回sessionId(作为COOKIE)。服务器根据sessionId访问session变量。
public void setAttribute(String name, Object value) 使用指定的名称和值来产生一个对象并绑定到session中 |