`
hgz123
  • 浏览: 107910 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

有关session

    博客分类:
  • JSP
阅读更多
欢迎访问: http://www.ptcms.cn


SessionHTTP协议是一种无状态的协议,客户向服务器发出请求,然后服务器返回响应(客户请求的页送至浏览器),连接就被关闭了,当下一次连接时,已经没有以前连接的信息了,无法判定本次连接和之前的连接是否来自于同一个客户。因此,为了保存来自同一客户的信息,可以使用session(会话)对象。

从打开浏览器请求服务器上的某个服务目录(一个Web应用程序的目录),到关闭浏览器离开服务器,称作一个 —— 会话。

客户可能会访问该服务目录中的多个页面,服务器通过客户的 session 对象就可以知道这是否是同一个客户,如果是,那么客户登陆一次就可以访问其它页面,而不必每个页面都登陆了。
session的常用方法:
获取session ID String getId() sessionid.jsp
tom.jsp
jerry.jsp
判断是否是新的session boolean isNew() sessionnew.jsp
设置属性值 setAttribute(Stirng name,Object value) login.jsp
welcom.jsp
获取属性值 Object getAttribute(String name)
删除属性值 removeAttribute(String name)
销毁session对象 invalidate() logout.jsp
session的创建时间 long getCreationTime() sessiontime.jsp
最后一次操作时间 long getLastAccessedTime()

session对象的ID当首次请求服务器上的JSP页面时,服务器会生成一个session对象,具有一个服务器上唯一的ID号:session ID ,同时这个ID号会被发送到客户端,存放到客户的cookie中(前述例子cookie中的JSESSIONID即是)。
直到浏览器关闭,或是session对象达到了最大生存时间(一般30分钟),则该session对象失效。

例如:从sessionid.jsp出发,依此访问同一个站点的其它几个页面(tom.jsp,jerry.jsp),可以发现sessionID是一致的。
获取sessionID的方法,String session.getId(),得到的是1个32位的字符串
session.jsp
<h1>获取SessionID: <%=session.getId() %></h1>

<h1>连接到tom.jsp页面</h1>
<form action="tom.jsp" method="post">
<input type="submit" value="到tom.jsp">
</form>
tom.jsp
<%
String sid = session.getId();
%>
<h1>
我是Tom页面,您在Tom页面中的session对象的ID是:
<%= sid %>
</h1>

<h1>点击超链接,连接到Jerry的页面:</h1>

<a href="jerry.jsp"> 欢迎到Jerry屋来! </a>
session属性设置:
举例:假设用户输入的帐户信息为 admin/1234,则表示登陆成功,可以浏览welcome.jsp页面,否则不能浏览,需要再登陆。
2个页面:
login.jsp :表单,验证登陆
welcome.jsp:欢迎页,用户先登陆成功之后才可访问。

【分析】:
可以利用session传递一个标识属性(flag)来判定用户是否成功登陆了:
 如果登陆验证成功,则使用:
session.setAttribute(“flag”,”OK”) 设置标识属性flag
 在welcome.jsp页面,根据属性flag是否有值,即可知道之前是否登陆过了:
if( session.getAttribute(“flag”)!=null )  则可以访问welcome页面,否则转回登陆页面
login.jsp
<form action="login.jsp" method="post">
    账号:<input type="text" name="uname"><br>
    密码:<input type="password" name="upw"><br>
    <input type="submit" value="登  陆">   
    </form>
   
    <%
    if(request.getParameter("uname") != null && request.getParameter("upw") !=null){
   
    String name = request.getParameter("uname");
    String pw = request.getParameter("upw"); 
   
    if(name.equals("admin")&& pw.equals("1234")){
   
    //若用户成功登陆,则设置flag属性值为OK
    //则在欢迎页上,根据属性flag值的判定,可以知道用户是否登陆成功了
   
    session.setAttribute("flag","OK");
   
    //可以利用session把用户名传递给欢迎页
    session.setAttribute("uname",name);
   
    //登陆成功后,跳转至欢迎页
    response.sendRedirect("welcome.jsp");
   
    }else{   
    %>
    <h1>登陆失败!</h1>
    <%
    }
    }
    %>
<%-- 欢迎页:先判定用户是否已经成功登陆(根据属性flag是否被设置)
    
     若flag有值,说明登陆验证是成功的,则显示欢迎消息
    
     否则,3秒钟后转回 login.jsp页
    
   --%>

<%
   if(session.getAttribute("flag")!= null){
%>
   <h1>欢迎<%= (String)session.getAttribute("uname") %>光临!</h1>
<%
   }else{  
%>   
    <h1>您还未登陆,请登陆后再访问!</h1>    
<%
    response.setHeader("refresh","3;url=login.jsp");
    }
%>
【注】不要去判断 flag的值是否为”OK”,如果没有通过登陆验证的话,根本不会有flag属性值传到welcome页面,session.getAttribute("flag")的结果会是null,无法进行字符串的比对。

注销:让用户的session失效
若希望在session生存时间到达之前释放session的资源,则可以手动销毁session对象,采用方法:invalidate() 。

例如:注销页logout.jsp,

<%
   session.invalidate();
%>
<a href="welcome.jsp">转去欢迎页</a>

session的时间相关:
创建session的时间:客户浏览器第一次访问服务目录上的页的时间
最后一次操作的时间:最近一次访问服务目录上的页的时间
【返回的时间是个自1970年1月1日以来的毫秒数,long型,需要用new Date(long time) 构造成为日期形式的时间】
大约计算客户的在线时间:getLastAccessedTime() - getCreationTime()

sessiontime.jsp
<%
//session.getCreationTime()获取session的创建时间
//session.getLastAccessedTime()获取最后一次操作的时间
long l1 = session.getCreationTime();
long l2 = session.getLastAccessedTime();
%>
<h1>
session创建时间:<%=new Date(l1)%>
</h1>
<h1>
session最后一次操作时间<%=new Date(l2)%>
</h1>
<h1>
用户在线时间:<%=(l2 - l1) / 1000%> 秒
</h1>

<h1>session生存时间:<%= session.getMaxInactiveInterval() %></h1>
3
1
分享到:
评论
1 楼 yzzh9 2009-06-05  
只有JSP内置对象3?1,2呢?

相关推荐

    有关session的技术原理及其应用

    ### 有关Session的技术原理及其应用 #### 一、引言 HTTP作为一种无状态协议,在完成一次客户端与服务器间的信息交换后即断开连接,这给跨页面的数据传递带来了挑战。为了解决这个问题,Web开发中引入了多种解决...

    php清除session

    确保在销毁session后,同时清除相关session cookie,例如: ```php session_start(); session_unset(); session_destroy(); // 删除session cookie setcookie(session_name(), '', time() - 3600, '/'); ``` 2. *...

    自己实现的spring-session

    如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...

    spring session redis分布式session

    接着,在Spring Boot的配置文件(application.properties或application.yml)中,配置Redis的相关信息: ```properties spring.redis.host=localhost spring.redis.port=6379 spring.session.store-type=redis ``` ...

    session共享 memcached-session-manager 1.9.6 jar

    为了使用这个库,开发者需要在Tomcat的`context.xml`或`server.xml`配置文件中添加相关的配置,指定Memcached服务器的地址、端口以及可能的序列化策略等。 总结来说,`memcached-session-manager`是一个用于在...

    报表session与应用session常识普及

    系统session通常用于存放共享信息,例如用户请求和应用状态等,而报表session则存放与报表相关的访问信息,比如报表模板的访问情况等。 FineReport是一种报表开发工具,它在Web应用中的session处理机制与传统Web...

    SpringSession+Redis实现Session共享案例

    - 首先,在项目中引入SpringSession和Redis的相关依赖。 - 配置Spring Boot的`application.properties`或`application.yml`,设置Redis连接信息,如主机名、端口、密码等。 - 在Spring Boot的配置类中,配置`...

    NET的csharp的session丢失sessionid不一样

    SessionID的变化主要与客户端浏览器的行为以及服务器端如何处理Session有关。在默认情况下,.NET框架通过HTTP Cookie来存储SessionID,这意味着SessionID是通过客户端浏览器来传递的。如果浏览器的Cookie设置被禁用...

    tomcat-redis-session-manager实现session共享 配置文件

    2. **添加依赖**:在你的项目中,添加Tomcat-Redis-Session-Manager的相关依赖库,这通常通过Maven或Gradle进行管理。 3. **配置Tomcat**:在`$CATALINA_HOME/conf/context.xml`或`$CATALINA_HOME/conf/server.xml`...

    退出页面自动清除session技巧

    该方法会清除与Session相关的所有数据,并使其失效。这是最常用的彻底清除Session的方式。 #### 实现退出时自动清除Session 为了实现用户退出页面时自动清除Session,可以通过监听浏览器的`onbeforeunload`事件,...

    spring session实现session共享

    1. **引入依赖**: 首先,需要在项目的pom.xml或build.gradle文件中引入Spring Session的相关依赖,具体依赖取决于选择的存储后端。 2. **配置存储后端**: 配置Spring Session以使用特定的存储后端,例如Redis,需要...

    java中使用session模拟用户登陆

    登出时,清除与该用户相关的Session信息: ```java session.removeAttribute("username"); // 从Session移除用户名 session.invalidate(); // 销毁Session,结束会话 ``` 6. **Session超时**:默认情况下,...

    一篇优秀Session讲解

    下面将详细介绍Session的相关知识点。 #### 一、Session概念 1. **HTTP协议的特点**:HTTP协议是无状态的,即每次客户端发起的请求都是独立的,服务器不会保存任何关于之前请求的信息。为了克服这一限制,引入了...

    tomcat-redis-session-manager

    在配置过程中,我们需要在Tomcat的`context.xml`或`server.xml`中添加相关配置,指定Redis服务器的地址、端口以及认证信息等。 Redis作为高性能的键值存储系统,具有高速读写和丰富的数据结构特性,使其成为session...

    springsession管理多台tomcatsession

    首先,需要在项目中引入 SpringSession 相关依赖。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml &lt;groupId&gt;org.springframework.session &lt;artifactId&gt;spring-session-data-redis ...

    ASP.NET Core-Session

    1. `Microsoft.AspNetCore.Session`:这个包提供了ASP.NET Core中的Session中间件和相关的API,用于处理会话状态。 2. `Microsoft.Extensions.Caching.Redis`:这个包允许我们将Session数据存储在Redis缓存中,提供...

Global site tag (gtag.js) - Google Analytics