今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了?

我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保

存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗

口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释:

当用户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的Session,

那么接下来当用户浏览这个Web应用的不同网页时,始终处于一个Session中

再详细些:

  • 当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息

  • Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的 *浏览器* 中

  • 用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid找到相应的HttpSession对象,从而获取用户的状态信息
  • 以上就是Session的运行机制,但是还没有提到Session的生命周期,再往下了解!

    其实让Session结束生命周期,有以下两种办法:

    • 一个是Session.invalidate()方法,不过这个方法在实际的开发中,并不推荐,可能在强制注销用户的时候会使用;
    • 一个是当前用户和服务器的交互时间超过默认时间后,Session会失效

    我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送

    任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的

    客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一

    个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使用的,最正常的办法

    就是不去管它,让它等到默认的时间后,自动销毁

    那么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?

    其实之前的Session一直都在服务器端,而当我们关闭浏览器时,此时的Cookie是存在

    于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。

  • 其实Cookie有两种:

    • 一种是存在于浏览器的进程中;
    • 一种是存在于硬盘上

    而session的Cookie是存在于浏览器的进程中,那么这种Cookie我们称为会话Cookie,

    当我们重新打开浏览器窗口时,之前的Cookie中存放的Sessionid已经不存在了,此时

    服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存

    有Sessionid的Cookie到客户端的浏览器中,此时对应的是一个新的会话,而服务器上

    原先的session等到它的默认时间到之后,便会自动销毁。

    ps:

    当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;

    当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;

    当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;

    当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,就是本文所阐述的,是不同的session,但是它和session的生命周期是没有关系的.

浏览器关闭后,Session会话结束了么?的更多相关文章

  1. Java Web 浏览器关闭后Session就会被销毁吗?

    浏览器关闭后Session就会被销毁吗? Session是JSP的九大内置对象(也称为隐含对象)中的一个,用于保存当前用户的状态信息,初学者可能认为Session的生命周期是从打开一个浏览器发送请求到 ...

  2. 浏览器关闭后Session真的消失了吗?

    今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了?  我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信 ...

  3. 如何让浏览器关闭后session失效

    llzzcc66 知道合伙人数码行家 推荐于2018-08-10   如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如 ...

  4. 浏览器关闭后,Session就销毁了吗?

    https://blog.csdn.net/QQ1012421396/article/details/70842148 话题:       当浏览器关闭后,Session就销毁了吗?答案:      ...

  5. Session的生命周期之关于浏览器关闭后的Session

    Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...

  6. Session会在浏览器关闭后消失吗?

    转  http://blog.csdn.net/rongwenbin/article/details/51784310 Cookie的两种类型   在项目开发中我们时常将需要在客户端(浏览器)缓存的数 ...

  7. 浏览器关闭使session失效的问题多种解决方式

    直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈   如果用户不点击网站的“退出”链 ...

  8. Django实战(一)-----用户登录与注册系统6(session会话、注册视图)

    因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的. 通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于 ...

  9. java 浅谈web系统当中的cookie和session会话机制

    一 Cookie: 1. Cookie翻译为小甜饼,有一种特殊的味道.cookie主要用来在(浏览器)客户端做记号用的.Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部 ...

随机推荐

  1. json数组本地获取,以及根据字段排序【部分摘录】

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. [SCOI2010]传送带

    在两个传送带上分别三分两个点计算 三分套三分 # include <bits/stdc++.h> # define IL inline # define RG register # def ...

  3. CODEFORCES 25E Test

    题意 三个字符串,找一个字符串(它的子串含有以上三个字符串)使它的长度最短,输出此字符串的长度. 题解 先枚举字符串排列,直接KMP两两匹配,拼接即可...答案取最小值.. 常数巨大的丑陋代码 # i ...

  4. Java集合中迭代器的常用用法

    该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...

  5. 用python给html里的css及js文件链接自动添加版本号

    传统的给文件链接添加版本号的方法是使用gulp-rev,这里提出的解决方案是使用python来替代gulp-rev. import os import re import uuid import sy ...

  6. JavaScript 数组基础知识

    // Array 类型: // 检测数组: // console.log(myarr instanceof Array) //true // toString()方法会返回由数组中每个值的字符串形式拼 ...

  7. 【python学习笔记】9.魔法方法、属性和迭代器

    [python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...

  8. WP Super Cache+七牛云配置CDN加速,让你的网站秒开

    CDN加速网站是几乎所有的站长都在考虑的问题,CDN,全称是Content Delivery Network,即内容分发网络.所谓CDN加速,通俗的来说就是把原服务器上数据复制到其他服务器上,用户访问 ...

  9. jdk7u79linuxx64.tar.gz下载

    jdk1.7下载: 百度云盘链接:https://pan.baidu.com/s/1cQFLnS 密码:wdek

  10. node.js 模块化

    模块是编写稍大一点点的程序 一般就会将代码模块化 在node.js中每一个文件就是一个模块,而文件路径就是模块名 怎么使用模块? 在编写某个模块是都有三个预先定义(require,exports,mo ...