session保存作用域,作用范围是一次会话。

Session的工作机制

  • 当服务器端调用了request.getSession()方法

    • 检查当前请求中是否携带了JSESSIONID这个Cookie

      • 有携带:根据这个JSESSIONID在服务器端查找对应的Session对象

        • 能找到:把找到的Session作为getSession()方法的返回值返回
        • 找不到:
          • 创建新的Session对象
          • 用新的JSESSIONID的值创建Cookie
          • 把新的Cookie返回给浏览器
      • 没携带:
        • 创建新的Session对象
        • 用新的JSESSIONID的值创建Cookie
        • 把新的Cookie返回给浏览器

Session的时效性

①Session对象为什么要有时效限制?

如果没有时间限制,Session对象数量会快速膨胀,随着访问网站的用户越来越多,Session对象只创建不释放,一定会在某个时间耗尽服务器端的资源。

②Session时效性机制

这个机制的设计很巧妙,它是一个柔性的机制,既避免Session对象无节制的创建耗尽服务器端内存空间,又保证了用户在持续使用Session时Session对象一直都在,不会打断用户的操作。

  • 每一个Session对象从创建出来就开始倒计时
  • 在倒计时的过程中,一旦有请求访问了这个Session,倒计时清零重新开始
  • 一旦一个Session对象的倒计时结束,那么这个Session对象就会被释放

③Session时效性方法

  • setMaxInactiveInterval(int interval)设置Session最大的过期时间,interval是一个以秒为单位的过期时间。
  • 最大空闲时间默认为1800秒,即半个小时。
  • invalidate()立即释放Session对象

voidHttpSession.setAttribute(k, v):向session中保存信息。

ObjectHttpSession.getAttribute(k):从session中获取信息。

- session保存作用域是和具体的某一个session对应的
- 常用的API:

long getCreationTime();【获取Session被创建时间】

String getId();【获取Session的id】

long getLastAccessedTime();【返回Session最后活跃的时间】

ServletContext getServletContext();【获取ServletContext对象】

void setMaxInactiveInterval(int var1);【设置Session超时时间】

int getMaxInactiveInterval();【获取Session超时时间】

Object getAttribute(String var1);【获取Session属性】

Enumeration getAttributeNames();【获取Session所有的属性名】

void setAttribute(String var1, Object var2);【设置Session属性】

void removeAttribute(String var1);【移除Session属性】

void invalidate();【销毁该Session】

boolean isNew();【该Session是否为新的】

session保存作用域的更多相关文章

  1. HTTP协议,会话跟踪,保存作用域,servlet类跳转

    解决post的编码问题,防止中文乱码 request.setCharacterEncoding("utf-8"); HTTP协议: (1)由Request(请求)和Response ...

  2. session保存用户信息

    前台jsp-------------- <%@ page import="com.manager.form.User" %><%User user = reque ...

  3. PHP SESSION 保存到数据库

    PHP SESSION 的工作原理 在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ...

  4. discuz清空session,导致session保存机制失败,session无法更新与解决

    <?php function userErrorHandler() { $e = func_get_args(); echo '<pre style="color:red;&qu ...

  5. Django 通过 session 保存个人信息

    通过 session 保存 个人 信息 登录的视图函数中: def login(request): ''' 登录 ''' err, user, pwd = '', '', '' if request. ...

  6. php将session保存到数据库的类实例(php版本需要大于5.4)

    这里实现了一个把session存储到数据库的类,包括数据表的创建.类的使用.php的配置. 可以更好地进行用户控制管理. 做项目的时候,有一个需求,是要实现禁止一个账号两处登录.同时要统计当前在线用户 ...

  7. Session保存用户名到Session域对象中

    Session保存用户名 1.构造登录界面 用户名: 密   码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE html> < ...

  8. Application保存作用域

    Application保存作用域,作用范围:一次应用程序范围有效.Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据. ServletContext在服务器启动时创建,在服 ...

  9. Request保存作用域

    Request保存作用域,作用范围是在当前请求中有效. 1.客户端重定向 2.服务器内部转发

随机推荐

  1. Redis系列5:深入分析Cluster 集群模式

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) 1 背景 前面我们 ...

  2. 万答#2,一样的Python代码,为什么可以删表,却不能更新数据

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题 运行下面的这段Python代码,却总是无法更新数据: import pym ...

  3. pat链表专题训练+搜索专题

    本期题目包括: 1074:https://pintia.cn/problem-sets/994805342720868352/problems/994805394512134144 1052:http ...

  4. 搞定面试官 - 可以介绍一下在 MySQL 中你平时是怎么使用 COUNT() 的嘛?

    大家好,我是程序员啊粥. 相信在大家的工作中,有很多的功能都需要用到 count(*) 来统计表中的数据行数.同时,对于一些大数据的表,用 count 都是瑟瑟发抖,往往会结合缓存等进行处理. 那么, ...

  5. C#/VB.NET 创建PDF/UA文件

    1.什么是PDF/UA文件 PDF/UA,即Universally Accessible PDF,该格式的PDF文件是于2012年8月以ISO标准14289-1发布的.具有普遍可访问的PDF文档标准. ...

  6. 【java】学习路线14-抽象类、多态

    /*抽象类 abstractabstract class A{    }注意abstract类中不一定需要有abstract方法但是有abstract方法的类中,该类一定是abstract方法抽象类不 ...

  7. ViewGroup事件分发源码分析

    1.AndroidStudio源码调试方式 AndroidStudio默认是支持一部分源码调试的,但是build.gradle(app) 中的sdk版本要保持一致, 最好是编译版本.运行版本以及手机的 ...

  8. c语言_二叉树的建立以及3种递归

    二叉树c语言的实现 二叉树的建立 二叉树的数据结构 typedef struct node{    int data;    struct node* left;    struct node* ri ...

  9. 【必知必会】手把手教你配置MySQL环境变量——图文详解

    一.先决条件 假设我们已经成功安装MySQL数据库.如果还有小伙伴不知道如何安装MySQL数据库,可以在本文下留言,留言数超20,则出一期"手把手教你安装MySQL数据库--图文详解&quo ...

  10. Go常见

    GO基础语法 方法或函数调用时,传入参数一般都是值复制,除非是map.slice.channel.指针类型是引用传递 短的变量声明(Short Variable Declarations),即自动推导 ...