HttpSession接口的注意方法:
public String getId()----------------------取得SESSION ID
public long getCreationTime()--------------取得SESSION的创建时间
public long getLastAccessedTime()----------取得SESSION的最后一次操作时间
public boolean isNew()---------------------判断是否是新的SESSION(新用户)
public void invalidate()-------------------让SESSION失败
public Enumeration getAttributeNames()-----得到全部属性名称
在整个的session中,本身最重要的部分是属性的操作,但是对属相的操作除了
一组:setAttribute()、getAttribute()、removeAttribute()之外,还有一些过时的操作;
1、session id
对于每一个用户而言,实际上都表示一个个不同的session,那么服务器是靠什么区分
这些用户的就是靠session id,即:每一个通过浏览器连接到服务器上的用户都会由
服务器自动的分配一个唯一的不会重复的编号;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
String id=session.getId();//得到session id;
%>
<h1>SESSION ID:<%=id%></h1>
<h1>SESSION ID长度:<%=id.length()%></h1>
</body>
</html>
每一个连接到服务器上的session id是完全不同的,所以服务器就是这些完成的,但是需要
注意,对于id的操作并不是成对的,因为在正常情况下如果存在了get方法就有set方法;
其实之前所说cookie时,自动设置的那个cookie就是每一个用户的session id,所以
session在进行操作的时候用到了cookie的处理机制;
但是对于session的操作有一点也必须说明的是,如果现在服务器关闭了,则session id
则肯定重新分配;测试方法,创建可以得到session id的jsp界面 ,通过浏览器打开,
这是会在界面上输出一个session id,这是关闭tomcat 删掉tomcat中的临时文件,启动tomcat,刷新
刚才的那个jsp界面,发现session id 变了,所以说服务器重新启动后,session id重新分配;
如果用户想关闭服务器后session id也可继续保留,那么就需要使用到序列化的机制;
所谓的对象序列化,指的是一个对象通过二进制保存或进行传输,而且对象所在的类
必须实现java.io.Serializable接口,对于session本身也可以完成这种序列化的操作,
但是它不是手工完成的,而是需要配置完成,在server.xml中完成;
<Context path="/lid" docBase="D:\javaeedemo">
<Manager className="org.apache.catalina.session.PersistentManager">
debug=0 saveOnRestart="true"
maxActiveSession="-1" minIdleSwap="-1"
maxIdleSwap="-1" maxIdleBackup="-1"
<Store className="org.apache.catalina.session.FileStore" directory="d:\temp"/>
</Manager>
</Context>
2、登陆及注销:
session在所有的项目开发中用的最多的地方是登陆验证及注销操作功能。
程序列表:
login.jsp 完成登陆表单的显示,同时向页面本身进行数据提交,已完成登陆;
welcome.jsp 此页面要求在用户登陆完成之后才可以显示登陆成功的信息;
logout.jsp 注销登陆,注销完后跳到login.jsp页面;
login.jsp:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<form action="login.jsp" method="post">
用户名:<input type="text" name="uname"/><br>
密 码:<input type="password" name="upass"/><br>
<input type="submit" value="登陆"/>
<input type="reset" value="重置"/>
</form>
<%//直接通过一个固定的用户名和密码
String name=request.getParameter("uname");
String password=request.getParameter("upass");
if(!(name==null||"".equals(name)||password==null||"".equals(password))){
if("lid".equals(name)&&"123".equals(password)){
//如果登陆成功,则设置session属性范围
session.setAttribute("username",name);
response.setHeader("refresh","2;URL=welcome.jsp");
%>
<h2>登陆成功,2秒后跳转到欢迎界面</h2>
<h2>如果没有跳转,请按<a href="welcome.jsp">这里</a>!</h2>
<%
}else{
%>
<h2>用户名或密码错误</h2>
<%
}
}
%>
</body>
</html>
welcome.jsp:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
if(session.getAttribute("username")!=null)
{
%>
<h1>欢迎<%=session.getAttribute("username")%>光临本系统,<a href="logout.jsp">注销</a></h1>
<%
}else{
%>
<h1>请进行系统的<a href="login.jsp">登陆</a></h1>
<%
}
%>
</body>
</html>
logout.jsp:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
response.setHeader("refresh","2;URL=login.jsp");
session.invalidate();//注销session
%>
<h1>您已成功退出本系统,2秒钟之后跳回到首页</h1>
<h1>如果没有跳转请按<a href="login.jsp">这里</a></h1>
</body>
</html>
以上的做法属于session使用最多的一种验证,可是除了这些之外,对于回话跟踪
还有一下四种技术:
·通过session提供的方法保存
·通过cookie
·通过表单的隐藏域
·通过地址重写
3、判断新用户;
在session的方法中有个isNew()方法判断一个用户是否是第一次访问页面;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
if(session.isNew()){
<h3>欢迎新用户光临</h3>
%>
<%
}else
{
%>
<h3>您已经是老用户了</h3>
<%
}
%>
<h1></h1>
</body>
</html>
4、取得用户的操作时间:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>这是测试</title></head>
<body>
<%
long start=session.getCreationTime();
long end=session.getLastAccessedTime();
long time=(end-start)/1000;
%>
<h1>您已经停留了<%=time%>秒</h1>
</body>
</html>
注:session指的是会话,而会话指的是 从打开浏览器到关闭该浏览器(关闭浏览器不是指
的关闭一个网页,而是指的关闭所有的网页---结束浏览器进行);打开不同的浏览器
代表不同的会话;