JSP中session的使用,包括sessionId的取得,invalidate、isNew等方法的使用
session 是package javax.http.servlet 下的Interface HttpSession接口
主要应用:用户登陆判断和购物车的实现.
session的主要方法:
在服务器上通过session来区分不同的用户-->sessionID:任何连接到服务器上的用户,服务器都会为之
分配唯一的不会重复的session ID
(1)取得session ID的方法:session.getId()
sessionId.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<h1>SESSIONID:<%=session.getId() %></h1>
此案例我们可以看出,不管怎么刷新IE,session id始终不变,其实sessionid 是由服务器统一管理的,人为
不能控制.
<%@ pagecontentType="text/html;charset=gb2312" %>
<h1>SESSIONID:<%=session.getId() %></h1>
<h1>SESSIONID Length:<%=session.getId().length() %></h1>
可以看出session id的长度为32位
(2)判断是否是新的session:session.isNew()
sessionNew.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%
if(session.isNew())
{
%>
<h1>欢迎光临本页</h1>
<%
}
else
{
%>
<h1>你不是新的session</h1>
<%
}
%>
如果是在sessionId.jsp上点开的页面,则打印"你不是新的session",如果重新开启一个浏览器,则打印"欢迎光临本页"
(3)设置属性:session.setAttribute(Stringname, Object value)
(4)取得属性:session.getAttribute(Stringname)
通过一个范例来说明session的用法:用户输入姓名为tiger,密码为123456,则表示登陆成功,成功后可以浏览welcome.jsp页面
login.jsp:表单 接收参数,判断用户是否合法
<%@ pagecontentType="text/html;charset=gb2312"%>
<form action="login.jsp" method="post">
用户名:<inputtype="text" name="uname"><br>
密 码:<input type="password"name="upass"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
<%
if(request.getParameter("uname")!=null&&request.getParameter("upass")!=null)
{
//接收自提交参数
String name = request.getParameter("uname");
String password =request.getParameter("upass");
//System.out.println(name);
//System.out.println(password);
if("tiger".equals(name)&&"123456".equals(password))
{
//合法用户,跳转到weicome.jsp
//判断用户为合法用户,接下来设置session的属性user的值为ok
session.setAttribute("user","ok");
response.sendRedirect("welcome.jsp");
%>
<%
}
else
{
//非法用户,打印错误
%>
<h1>登陆失败!!</h1>
<%
}
}
%>
welcome.jsp:欢迎页,要求用户先登陆之后才能访问,否则不能访问
<%@ page contentType="text/html;charset=gb2312"%>
<%
//取出session设置的属性值进行判断,看是否为空
if(session.getAttribute("user")!=null)
{
%>
<h1>欢迎光临!!!</h1>
<%
}
else
{
%>
<h1>你还未登陆,2秒后返回登陆页</h1>
<%
response.setHeader("refresh","2;url=login.jsp");
}
%>
(5)删除属性session.removeAttribute(String name)
注意:j2ee的session的方法中有三个Deprecated的方法,它和现在用的方法的关系
putValue(String name, Object value)------->setAttribute(String name, Object value)
getValue(String name) -------->getAttribute(String name)
removeValue(String name) ----->removeAttribute(String name)
这几个是废弃的方法,不建议去使用!!
(6)用户注销:让用户的session失效
如果session失效,则在session保留的全部操作也将消失
方法: invalidate(),此方法属性一个手工操作的方法
如果session长时间不被使用,则也会自动消失
修改一直前面的welcome.jsp页面,增加一句<a href="logout.jsp">注销</a>
<%@ page contentType="text/html;charset=gb2312"%>
<%
//取出session设置的属性值进行判断,看是否为空
if(session.getAttribute("user")!=null)
{
%>
<h1>欢迎光临!!!</h1>
<a href="logout.jsp">注销</a>
<%
}
else
{
%>
<h1>你还未登陆,2秒后返回登陆页</h1>
<%
response.setHeader("refresh","2;url=login.jsp");
}
%>
然后新建一个logout.jsp页面,程序代码如下,运行看一下效果
<%@ pagecontentType="text/html;charset=gb2312" %>
<%
//用户注销
session.invalidate();
%>
<a href="welcome.jsp">welcome.jsp</a>
(7)得到session的创建时间,也就是用户登陆服务器的时间
方法:long getCreationTime()该方法返回一个long类型
sessionTime.jsp
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%
//取得session的创建时间
long l = session.getCreationTime();
%>
<h1><%=new Date(l) %></h1>
(8)取得用户最后一次操作的时间
方法:long getLastAccessedTime()方法出返回一个long类型
修改后的session.jsp
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%
//取得session的创建时间
long l = session.getCreationTime();
long l2 = session.getLastAccessedTime();
%>
<h1>Session的创建时间<%=new Date(l)%></h1>
<h1>最后一次操作时间<%=new Date(l2) %></h1>
随着我们刷新页面,最后一次操作时间在变化
范例:求出用户在线时间,通过公式:最后一次操作时间-Session的创建时间,但是要注意,这个方法并不科学
修改后的代码如下
<%@ pagecontentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%
//取得session的创建时间
long l = session.getCreationTime();
long l2 = session.getLastAccessedTime();
%>
<h1>Session的创建时间<%=new Date(l)%></h1>
<h1>最后一次操作时间<%=new Date(l2) %></h1>
<h1>用户在线时间:<%=(l2-l)/1000 %></h1>
(9)session与cookie的比较
session保存在服务器上,而cookie保存在客户端上
session比cookie更安全,session比cookie更占用资源
开发原则:尽量少使用session,尽量少向session保存信息
session使用了cookie的机制,如果cookie被禁用,session也无法使用