JAVA WEB之Session对象

会话对象session

什么是session对象:

客户端与服务器端的一次会话(request–response)

session干什么用?

  • 存储或读取客户相关信息
  • 与request相比作用范围更大

为什么要用session?

HTTP是一种无状态协议,客户向服务器发出请求(request),服务器返回响应(response),连接就被关闭,在服务器端不保留连接的相关信息

如何使用session?

  • 获取session对象ID
    • 每个session对象唯一的标识session ID
  • session对象存储数据
    • 保存用户访问期间产生的相关数据
  • session对象的生存期限

获取session对象的ID

session.getID(); //获取当前用户session对象的ID

  • Web服务器会为每个用户自动创建一个session对象,并分配一个不同于其它用户的ID。

session保存数据

数据创建

public void setAttribute(String key, Object obj)//将参数obj指定的对象保存到session对象中,key为指定的关键字(变量名)。

session.setAttribute(“username” ,“张三”);

数据获取

public Object getAttribute(String key)//获取session中关键字是key的对象。

session.getAttribute(“username” );

移除绑定的数据

session.removeAttriubte (“username” );

获取session对象所有关键

public Enumeration getAttributeNames( )//产生一个枚举对象,获取session中的各个对象所对应的关键字。

session的例题

在这里插入图片描述

  • 如果是重定向的跳转页面,那么当浏览器不会自动保存cookie值时,session生命周期只存在于一个页面。跳转页面旧的session对象会被删除,新页面会新建一个session,导致session.getAttribute()获取的值全是Null。因为eclipse内置浏览器默认就是不保存cookie值得,所以我第一次测试的时候一直出错。
  • 后来在Chrome上测试成功,Chrome默认是保存cookie的,将Chrome设置成不保存cookie,则测试结果与eclipse内置浏览器结果完全一样,会新建session
  • 如果是转发跳转页面,则不需要考虑这么多。转发不会删除request于response(可能cookie也会自动保存)
    request.getRequestDispatcher("other.jsp").forward(request, response); //转发

session的生命周期

  • 在使用session的时候需要判断session是否过期,因为session有生存期限,一般是20-30分钟,因此如果使用过期的session对象则会出现意料之外的错误
  • 判断方法
    • 用户是否关闭浏览器
    • session对象是否调用invalidate()方法
    • session对象是否达到设置的最长发呆时间 (????)

一、判断生存周期的几个方法

 //设置有效期
public boolean isNew()  //session是否为新创建的
 //获取两个请求最大时间间隔
public int getCreationTime()  //获取session创建时间

二、会话超时管理

  • 返回客户端最后一次与会话有关的请求时间
getLastAccessedTime()
  • 以秒为单位返回一个会话内两个请求最大时间间隔
public int getMaxInactiveInterval()
  • 以秒为单位设置session的有效期
public void setMaxInactiveInterval(int max Value)
  • 销毁session
    • 虽然当客户端长时间不向服务器发送请求后,session对象会自尽,但对于某些实时统计在线人数的网站(例如,聊天室),每次都等session过期后,才能统计出准确的人数,这是远远不够的(???),所以还需要主动杀掉session。
session.invalidate()

session方法全家桶

public void setAttribute(String Key,Object obj):session对象类似于散列表,可以调用该方法将参数Object指定的
对象obj添加到session对象中,并为其添加的对象指定了一个索引关键字。如果添加的两个对象的关键字相同,
则先前添加的对象被清。
 public Object getAttribute(String Key):获取session对象中含有的关键字是Key的对象,由于任何对象都可以添加
到session对象中,所以在该方法取回对象时应进行强制类型转换。
 public Enumeration getAttributeName():session对象调用该方法产生一个枚举对象.该枚举对象使用nextElement()
方法遍历Session对象所含有的全部对象。
 public long getCreationTime(): Session对象调用该方法要以获取对象创建的时间,单位是毫秒,从197071
日午夜起至该对象创建时刻所走过的毫秒数。
 public long getLastAccessedTime():获取当前session对象最后一次被操作的时间。
 public int getMaxInactiveInterval():得到允许session对象处于非活动状态的最长时间。
 public vodi setMaxInactiveInterval(int n):设置允许session对象处于非活动状态的最长时间。(单位是秒)。
 public void removeAttribute(String Key):从当前session对象中删除关键字是key的对象。
 public String getId():获取session对象的编号。
 invalidate():使Session对象无效。
 long getCreationTime():返回session对象的创建时间
 public String getId():返回session创建时JSP引擎为它设置的唯一ID号。
 long getLastAccessedTime():返回此session中客户端最近一次的请求时间。
 int getMaxInactiveInterval():返回两次请求间隔多长时间此session被取消(ms)。
 5String[] getValueNames():返回一个包含此session中所有可用属性的数组。
 boolean isNew():返回服务器创建的一个session,客户端是否已经加入。
 void setMaxInactiveInterval():设置两次请求间隔多长时间此session被取消(ms)
发布了22 篇原创文章 · 获赞 0 · 访问量 152

猜你喜欢

转载自blog.csdn.net/weixin_42649617/article/details/104849787