当前位置: 首页 > news >正文

java中session对象及其常用方法



session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态。在会话中存储的信息,在浏览器发出后续请求时可以获取这些会话的有效数据。

在jsp页面中可以直接使用session对象,也可以通过pageContext.getSession()或request.getSession()方法重新获取session对象。

session对象可以保存用户的登录信息,实现购物车功能等。

HTTP协议是一种无状态协议。客户向服务器发出请求request,然后服务器返回响应response,连接就被关闭了。在服务器端不保留连接的有关信息,因此当下一次连接时,服务器端已没有以前的连接信息了,无法判断这一次连接和以前的连接是否属于同一个客户。因此,必须使用会话记录有关连接的信息。

从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器是,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。

session的工作原理如下:

1.客户首次访问服务器的一个页面时,服务器就会为该客户分配一个session对象,同时为该session对象指定一个唯一的ID,并且将该ID号发送到客户端并写入到cookie中,使得客户端与服务器端的session建立一一对应关系。

2.当客户继续访问服务器上的其他资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。

3.当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。

session对象主要用于属性操作和会话管理,常用方法如下:

1.public void setAttribute(Sting name, Object value),设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。

2.public Object getAttribute(String name),在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。

3.public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。

4.public void invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。

5.public String getId( ),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。

6.public void setMaxInactiveInterval(int interval),设置会话的最大持续时间,单位是秒,负数表明会话永不失效。

7.public int getMaxInActiveInterval(),获取会话的最大持续时间。

8.使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。
    
Date creationTime = new Date(session.getCreationTime());
    Date accessedTime = new Date(session.getLastAccessedTime());

<%@ page language="java" import="java.util.*" contentType="text/html;charset=GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>session对象方法</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
    <b>
    会话ID:<%=session.getId() %> <br>
    是否新会话:<%=session.isNew() %><br>
    设置和获取属性对象:用户名 =
    <%session.setAttribute("用户名","某某"); %>
    <%=session.getAttribute("用户名") %><br>
    <%
   
Date creationTime = new Date(session.getCreationTime());
    Date accessedTime = new Date(session.getLastAccessedTime());
     %>
     会话创建时间:<%=creationTime %><br>
     上次访问时间:<%=accessedTime %><br>
     会话持续时间(s):<%=session.getMaxInactiveInterval() %><br>
     <%session.setMaxInactiveInterval(12); %>
     修改后的会话持续时间(s):<%=session.getMaxInactiveInterval() %><br>
     <%session.invalidate(); %>
     </b>
  </body>
</html>


转载自:http://blog.sina.com.cn/s/blog_5c5bc9070100ze5m.html


相关文章:

  • 从Hibernate中获得JDBC连接
  • iOS学习之UIActionSheet的使用
  • Android HOME键那些事
  • 在非activity的类中调用startActivity(intent)
  • iOS中#import和@class的区别
  • Android开机自动启动程序设置 .
  • varchar与nvarchar的区别
  • Android中的资源文件
  • Java中的==和equals区别
  • iOS编程中视图控制器与视图类
  • IOS页面切换的几种方式
  • sqlite中数据类型总结
  • Android中asset文件夹和raw文件夹区别与用法
  • Android开发中进程等级相关内容
  • 如何将应用安装到/system/app下
  • hexo+github搭建个人博客
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Druid 在有赞的实践
  • isset在php5.6-和php7.0+的一些差异
  • JSDuck 与 AngularJS 融合技巧
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Python学习之路13-记分
  • swift基础之_对象 实例方法 对象方法。
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue学习系列(二)vue-cli
  • Web Storage相关
  • Web标准制定过程
  • 百度地图API标注+时间轴组件
  • 成为一名优秀的Developer的书单
  • 机器学习学习笔记一
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何合理的规划jvm性能调优
  • 使用common-codec进行md5加密
  • 微服务框架lagom
  • 新书推荐|Windows黑客编程技术详解
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​Python 3 新特性:类型注解
  • #include<初见C语言之指针(5)>
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014# day.1 T2 联合权值
  • (12)Hive调优——count distinct去重优化
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)php投票系统 毕业设计 121500
  • (一)RocketMQ初步认识
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET NPOI导出Excel详解