3.5 session对象
session是一个网站所有页面都能访问的一个表格。这个表格只有两列,类似于这样:
每增加一个session数据,表格就多一行数据,行数并没有限制(如果内存足够的话)。数据都是以“名称-值”这样的对来保存的,读取的话,是根据名字来读取的。
下面这个是保存一对数据到session,名称是abc,值是123
名称 | 值 |
---|---|
abc | 123 |
username | zhang |
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %><% session.setAttribute( "abc" , "123" );%>
以下是从session中读取名称为"abc"session可以直接保存对象,全部以Object类型保存,读取出来的时候,需要把Object类型转换成对应的类型才能使用。在一个页面保存一条session数据,可以在其余页面读取。
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %><% String value=(String)session.getAttribute( "abc" );%>
session值是会定期清除的,例如session经常用来保存用户的登陆状态,如果超过一定时间没有操作,那么session清空,这个账户就是未登录状态了。我们可以通过这个函数session.setMaxInactiveInterval(arg0),来修改超时的时间,以毫秒为单位。
例如要定30分钟超时,那么就是session.setMaxInactiveInterval(30*60*1000)。
session是和用户相关联的,例如同时有两个人使用网站,就会生成两个不同的session对象,它们互不干涉。这个过程是容器(tomcat)来做的,对我们开发者来说是透明的。
如果要手动删除掉本用户关联的所有session,那么使用这个方法:session.invalidate()。
如果只是session的某行数据要删除掉,那么就要用session.removeAttribute(Stringname),例如登出(退出)操作(点击后删除用户登录的session值)
返回类型 | 方法名 | 功能 | 示例 |
---|---|---|---|
void | setAttribute(Stringname,Objectvalue) | 保存一条数据到session,名字是name,值是value,如果已经有同名数据存在,那么它的值会被覆盖 | session.setAttribute("abc","123"); |
Object | getAttribute(Stringname) | 按照名字name从session取值,如果不存在,返回null | Stringvalue=(String)session.getAttribute("abc"); |
void | setMaxInactiveInterval(inttime) | 设置session超时时间 | session.setMaxInactiveInterval(30*60*1000) |
void | invalidate() | 将session失效,删除所有sesison数据 | session.invalidate() |
void | removeAttribute(Stringname) | 根据名字删除session的某行数据 | session.removeAttribute("abc"); |