session的详细说明和用法

来源:互联网 发布:php 多线程并发处理 编辑:程序博客网 时间:2024/05/04 12:44

session对象

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>
  
密&nbsp;&nbsp;码:<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也无法使用

 

0 0