session的详细说明和用法

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Session 是 Spring 框架提供的用于管理和跟踪用户会话的解决方案。在使用 Spring Session 时,可以使用不同的方法来生成 session ID。 1. UUID(Universally Unique Identifier):使用 Java 提供的 UUID 类来生成 session ID,该方法生成的 ID 是全局唯一且不可预测的。可以通过调用 `UUID.randomUUID().toString()` 方法来获取一个随机生成的 UUID 字符串作为 session ID。 2. SecureRandom:可以使用 `java.security.SecureRandom` 类来生成 session ID,该类提供了生成安全随机数的方法。可以通过调用 `SecureRandom.getInstanceStrong()` 方法获取一个安全的随机数生成器实例,然后使用该实例生成 session ID。 3. 基于时间戳的生成器:可以使用当前时间戳来生成 session ID,这种方法生成的 ID 是递增的,但不是全局唯一的。可以通过调用 `System.currentTimeMillis()` 方法获取当前时间戳,并将其转换为字符串作为 session ID。 4. 自定义生成器:你也可以根据自己的需求,自定义生成 session ID 的方式。例如,可以使用用户名、IP 地址、时间戳等信息进行组合,然后进行哈希计算得到一个唯一的 session ID。 在 Spring Session 中,可以通过配置文件或代码来指定使用哪种方法来生成 session ID。可以调用 `setDefaultSessionIdGenerator()` 方法,并传入一个实现了 `SessionIdGenerator` 接口的类的实例来设定 session ID 的生成器。 以上是一些常见的生成 session ID 的方法,具体选择哪种方法取决于实际情况和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值