session对象是java.servlet.http.HttpServlerSession 接口的实例。
在session 中,最重要的就是属性的操作,可是对属性的操作除了setAttribute( ) getAttribute( ) removeAttribute( ) 之外,还有一组废弃了的属性操作。
1、session id
每一个用户实际上表示一个个不同的session, 那么服务器就是靠session id 来区分这些用户的。即,每个通过浏览器连接到服务器上的用户都会由服务器自动分配的唯一的编号。取得这个ID 使用的 public string getId( ).
<body>
<%String id = session.getId();%>
id=<%=id %><br>
id长度=<%=id.length() %>
</body>
这里可以看出,id 的操作不是成对的,因为id 是由服务器自动分配的,不需要set。而且服务器重启之后,则session id 需要重新分配。但是可以通过在server.xml中自动配置,完成序列化操作可以保留session id
2、登录以及注销
登录
session 在所有项目中使用最多的就是 登录以及注销。
<body>
<form action="aa.jsp" method="post"> // -------先创建一个登录界面的表单----------
用户名:<input type="text" name="uname">
密码: <input type="password"name="upass"><br>
<input type="submit" value ="登录">
<input type="reset" value ="重置">
</form>
<% //直接通过一个固定的用户名和密码
String name =request.getParameter("uname");
String passw =request.getParameter("upass");
//---------这里固定用户zpp以及密码1234.并判断在上面登录界面中输入的是否与固定用户相同------------
if("zpp".equals(name)&&"1234".equals(passw)){
%>
<h3>用户登录成功</h3>
<%} else
{%>
<h3>用户登录失败</h3>
<%} %>
</body>
// 这里没有数据输入时,也被判为与固定用户不相等
输出:
所以应该先判断输入的用户名以及密码是否为空
<body>
<form action="session.jsp" method="post"> // 这里的form 是提交到自己的页面!!!(本程序运行于session.jsp中)
用户名:<input type="text" name="uname">
密码: <input type="password"name="upass"><br>
<input type="submit" value ="登录">
<input type="reset" value ="重置">
</form>
<% //直接通过一个固定的用户名和密码
String name =request.getParameter("uname");
String passw =request.getParameter("upass");
if(!(name==null||"".equals(name)||passw==null||"".equals(passw))) // 判断是否为空!!
{ if("zpp".equals(name)&&"1234".equals(passw)){
// 如果登录成功,则设置session属性范围。。这样在跳转后的页面可以通过session.getAttribute("userid")来判断是否为注册过的用户
session.setAttribute("userid", name);
response.setHeader("refresh","2;URL=hello.jsp");
%>
<h3>用户登录成功,2秒后自动跳转到欢迎页面,<a href="hello.jsp">如果没有跳转请点击这里</a></h3>
<%} else
{%>
<h3>用户登录失败</h3>
<%}} %>
</body>
登录成功页面:
在hello.jsp 中通过在 session.jsp 中设置的session属性范围, 判断是否属于已注册客户
<body>
<%if(session.getAttribute("userid")!=null){ %>
<h3>欢迎<%=session.getAttribute("userid") %>注册成功</h3>
<%}
else{%>
<h3>请先<a href="session.jsp">注册</a></h3>
<% }
%>
</body>
如果注册成功,则提示 :
否则 ,直接打开
http://localhost:8080/helloworld/result.jsp
会提示
注销
session中通过invalidate()来注销
在欢迎页面加上注销的选项:
<body>
<%if(session.getAttribute("userid")!=null){ %>
<h3>欢迎<%=session.getAttribute("userid") %>注册成功</h3>
<br><h4><a href="logout.jsp">注销</a></h4> //-------注销选项------------
<%}
else{%>
<h3>请先<a href="session.jsp">注册</a></h3>
<% }
%>
</body>
在注销logout.jsp 页面中
<body>
<%
response.setHeader("refresh", "2;URL=session.jsp");
session.invalidate(); //----已注销--------
%>
<h3>您已成功退出本系统,两秒后跳会主页。//--------response.setHeader来wqnacheng完成跳转----------
<br> 如果没有跳转,请点击<a href="session.jsp">这里</a></h3>
</body>
判断新用户
session中可以通过isNew( )方法来判断用户是否是第一次访问。
<body>
<% if(session.isNew()){ %>
欢迎第一次
<%} %>
</body>
即可,刷新一次浏览器之后,就不是新用户了。。
取得用户操作时间
一个session的具体操作时间,可以通过计算的方法取得。
getCreationTime( )--->表示创建时间。getLastAccessedTime( ) ---> 表示最后访问时间。最后访问时间-创建时间=操作时间(毫秒)
<body>
<%
long start =session.getCreationTime();
long end =session.getLastAccessedTime();
long time = (end-start)/1000; // -----------因为是毫秒 需要除以1000----------
%>
<h3>您已经操作了<%=time %>秒。</h3>
</body>