[05] Session概要

1、Session是什么

除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态,即Session是服务器端使用的一种保存客户端状态的机制。Cookie在客户端,Session在服务器端。

围绕以上的概念来说,其实Session还包含不同的语义:

(1)Session会话

我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session。即客户端向服务器发送请求,服务器接收请求并生成响应返回给客户端,这样一次连续的调用过程。

从这个语义出发,就涉及到所谓Session持续的时间,以及Session过程中发生了什么操作等。

(2)Session作用域

其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。

从这个语义出发,则涉及到Session中存放什么内容,如何根据键值从Session中获取匹配的内容等。

(Session的实现机制,以及和Cookie的区别,存在的价值,本篇暂不展开,会在后面的文章中单独拿出来解释)

2、HttpSession接口

在Servlet API中,定义了HttpSession接口,用来封装会话对象。

2.1 会话对象的获取

因为该接口类型的对象是由容器创建的,所以不能直接使用new进行创建,而要使用HttpServletRequest中的方法进行获取

  • public HttpSession getSession()  获取当前请求相关的Session,若不存在则新建后返回
  • public HttpSession getSession(boolean create)  若参数为true,则等同getSession();若为false,则Session不存在时返回null,而不会新建

下面是HttpSession接口中定义的部分方法:

返回值     方法名     说明
void     setAttribute(String key, Object value) 以key/value的形式保存对象值    
Object     getAttribute(String key) 通过key获取对象值
void     removeAttribute(String key) 通过key删除属性
int     getMaxInactiveInterval()     获取session的有效非活动时间,以秒为单位
void     setMaxInactiveInterval(int interval) 设置session的最大非活动时间,以秒为单位,超时则销毁
String     getId()     获取session对象的编号
void     invalidate() 设置session对象失效
boolean     isNew()     判断一个session是不是一个新创建的会话对象

HttpSession中定义了三个与属性相关的方法,get / set / remove Attribute,分别用来 获取 / 设置 / 删除 属性。

这三个方法的声明和 HttpServletRequest 中与属性相关的方法是相同的,主要区别在于:

  • 有效范围不同
  • 请求中的属性只在当前请求内有效,只有通过转发才能把当前请求对象转发到下个资源
  • 会话属性在会话对象中有效,即客户端和服务器连接后,只要没有关闭浏览器,服务器也正常,则在该次会话中属性一直有效

另,由于会话对象有效时间长,安全性相对较低,所占资源较多。所以,请求属性能解决的问题,就用请求对象,必须时才使用会话。

2.2 会话失效

会话对象是容器创建的,并保存在容器中。

若客户端连接到服务器后却置之不理,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器会在会话对象闲置默认时间后销毁会话对象,多数容器默认30min销毁会话对象。所谓闲置,就是没有使用Session对象。

有三种方式配置会话的失效时间:

(1)在web.xml中配置,如下图配置闲置50min销毁

  1. <session-config>
  2. <session-timeout>50</session-timeout>
  3. </session-config>

(2)使用setMaxInactiveInterval设置最长有效时间

HttpSession接口提供了setMaxInactiveInterval方法用以设定session的有效时间,以秒为单位,若形参为负数,则表示永不失效。

如设置会话有效时长为2小时:

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. System.out.println("doGet() running...");
  3. HttpSession session = request.getSession();
  4. session.setMaxInactiveInterval(2*60*60);
  5. }

如果用以上两种方式同时设置Session的有效时间,则以设定的较小的时间为准。

需要注意的是,上面这两种方式还是有区别的:

  • web.xml中配置有效时间是针对当前应用下的所有session,而setMaxInactiveInterval方法只是针对单独的某个session对象
  • web.xml中设置时间单位是min,而setMaxInactiveInterval设置时间单位是sec

(3)使用invalidate立即失效

除了根据有效时间使会话失效之外,还可以调用HttpSession中的invalidate方法,使会话立即失效。

我们在涉及账户登录后常常用到session保存部分用户信息,在用户选择登出时,就要使用invalidate让session失效,以保证用户信息安全,同时提高服务器的效率。

时间: 2024-11-07 13:45:34

[05] Session概要的相关文章

Tomcat服务器配置以及相关配置文件介绍

摘自:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357/ context.xml 文件 配置属性说明 用于配置web应用部署时的物理目录与虚拟目录的映射等.由于属性太多本文只介绍几种常见的配置.附上全部属性链接,请猛戳—>点我 Context的可以配置在以下地方配置: 1:$CATALINA_BASE / conf / context.xml 文件中配置.如果你在这个地方配置.那么这个配置文件将会被所有的webAp

理解PHP 依赖注入|Laravel IoC容器

看Laravel的IoC容器文档只是介绍实例,但是没有说原理,之前用MVC框架都没有在意这个概念,无意中在phalcon的文档中看到这个详细的介绍,感觉豁然开朗,复制粘贴过来,主要是好久没有写东西了,现在确实很懒变得! 首先,我们假设,我们要开发一个组件命名为SomeComponent.这个组件中现在将要注入一个数据库连接. 在这个例子中,数据库连接在component中被创建,这种方法是不切实际的,这样做的话,我们将不能改变数据库连接参数及数据库类型等一些参数. 01 <?php 02   0

基于MINA构建简单高性能的NIO应用

mina是非常好的C/S架构的java服务器,这里转了一篇关于它的使用感受. 前言MINA是Trustin Lee最新制作的Java通讯框架.通讯框架的主要作用是封装底层IO操作,提供高级的操作API.比较出名的通讯框架有C++的ACE.Python的Twisted,而Java的通讯框架还有QuickServer.Netty2.Cindy.Grizzly等. 2004年6月,Trustin Lee发布了一个通讯框架Netty2,是Java界第一个事件模型架构的通讯框架,Cindy也从中借鉴了不少

JavaEE细节问题05——Cookie和Session

Cookie和Session的作用: 都是用于存储一些关键数据. Cookie和Session的存储位置: Cookie储存在客户端,Session储存在服务器 Cookie的产生和销毁以及原理: Cookie由服务器产生,通过HTTP协议发送给客户端. 在协议的响应头中的:Set-Cookie标注了这个cookie的信息: 下次如果有cookie带给服务器时,将会在 在协议的请求头中的:Cookie标注了这个cookie的信息: /*  * 正值表示 cookie 将在经过该值表示的秒数后过期

Java-No.05 Java设置session超时(失效)的三种方式

1.在web容器中设置(此处以tomcat为例) 在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置: <!-- ==================== Default Session Configuration ================= -->   <!-- You can set the default session timeout (in minutes) for all newly   -->   <!-

2015.05.05,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论事情进展” SESSION 42

HOW TO TALK ABOUT WHAT GOES ON TEASER PREVIEW 一些以-ate结束的动词,通常表示: to exhaust([ig'z?:st] n. 排气,排气装置 v. 用尽,耗尽,使...精疲力尽 [计算机] 排除)? to scold severely? to deny oneself? 重复主要点? 作为mental或者intellectual stagnation([stæg'nei??n] n.停滞)的牺牲品? to pretend? to hint?

2015.05.04,外语,读书笔记-《Word Power Made Easy》 14 “如何谈论日常现象” SESSION 41

1. people are the craziest animals bovine(['b?uvain] adj. (似)牛的, 迟钝的),像牛一样placid(['plæsid] adj. 安静的, 平和的),stolid.patient.unexcitable,来自描绘ox或cow的拉丁词语boivs,加上后缀-ine(like,similar to,characteristic of).称某人bovine并不是赞扬他,这个词比phlegmatic([fleg'mætik] adj. 冷静的

2015.05.12,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论不同人的特点” SESSION 45

TEASER PREVIEW 以-ous结尾的,描绘某人特点的词语包括: fawning(['f?:ni?] adj.奉承的),servilely(['s?:vail] adj. 卑屈的, 奴隶的) attentive, transparently self-ingratiating([in'grei?ieit] vt. 逢迎, 讨好)? nagging(['nægi?] adj. 唠叨的, 纠缠的, 挑剔的 动词nag的现在分词),不满意的,抱怨的? snobbish, haughtily c

oracle_用户与概要文件

Oracle 用户与概要文件 2012-09-01 15:05:47| 分类: Oracle | 标签:用户与概要文件 |举报 |字号大中小 订阅 用户管理看上去简单其实也是最常出现问题的一个环节,因为它不仅包括创建用户与授权,还包括安全策略与资源管理.在大型应用,资源的管理是对DBA的一个考验. 默认给用户分配的是DEFAULT概要文件,将该文件赋予了每个创建的用户.但该文件对资源没有任何限制,因此管理员常常需要根据自己数据库系统的环境自行建立概要文件. 1.用户的创建 可以使用create