对于做web开发的人,不管用ASP.NET JAVA还是其他,都会经常用Session来保存一些信息。而对于Session消失的问题,初学者都会有个误区,认为关闭浏览器,Session值就丢失了。包括我自己也一直是这么认为的。
关闭浏览器Session真的会丢失吗?
先让我们来看下session机制。
session机制session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

从上面可以知道,在客户端会保存一个Session id的值,既然能在客户端保存Session值。这里就有一个问题,Session在客户端是怎么保存的,保存在哪里?
===================================
以下关于cookie和关于session的内容摘自http://blog.csdn.net/wangzhkai/archive/2009/05/15/4187496.aspx

关于cookie

cookie怎么使用就不说了,cookie按照在客户端存放的方式,可以分为两类,
一种是会话性质的cookie,存放在浏览器内存中,当你在用代码向客户端写入cookie的时候,如果没有指定过期时间,那么cookie是存放在浏览器的内存里面的,不会持久化在硬盘上,也就是你在浏览器的临时文件里找不到!
一种是持久化的cookie,存放在硬盘上,当你指定了cookie的过期时间,那么,在客户端写入cookie的时候就会在浏览器的临时文件下生成一个文件,具体格式和名字可以到浏览器临时文件去看下

cookie的原理是这样的:当你在服务器端的代码里写了response.cookie["mycookie"]="mytestcookie"的时候,返回给客户端的http响应中,会在http相应头中加入cookie的信息,浏览器收到相应后,会按照http响应头里的cookie在客户端建立cookie。
客户端的cookie也是插在http头中发送到服务器端的,并且,一个域,在客户端建立的所有cookie,在客户端的每一次的http请求都会带着,比如testwebsite.com这个站点,任何时刻写到客户端的cookie,只要不过期,浏览器在向testwebsite.com发送http请求的时候,会带上这些cookie,所以cookie在客户端的大小是有限制的

关于session
cookie明白了之后session就容易理解了,asp.net默认的session就是通过第一种cookie来实现的,你可以把自己的浏览器的cookie彻底禁用,然后再去登录一些注册过的门户网站,会发现很多都登录不了了。是cookie,将http的请求变得有状态。session的实现是web服务器的事情,不过很显然是利用会话cookie,也就是存放在浏览器内存里的那种cookie来实现的,在cookie里只是存放了SessionID,然后在服务器上建立了一张表,对应客户端的SessionID。这张表是存放在服务器上的进程中的,也就是服务器的内存里,也就是Application里。当客户端请求服务器的时候,如果服务器发现这是一个新的请求,就会分配给他一个SessionID,也就是在浏览器写入一个sessionID的cookie。你可以试一下,在你请求过一次服务器之后,在服务器遍历客户端所有的cookie,就会发现这个叫做SessionID的cookie。
========以上部门来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangzhkai/archive/2009/05/15/4187496.aspx===========

根据上面的分析 也可以知道,所谓的关闭浏览器,Session就丢失是因为我们把Session保存在会话性质的cookie,也就是保存在浏览器的内存中,关闭浏览器时,因为浏览器的内存不存在了,所以session就丢失了。
如果我们能让Session按cookie的第二种存放的方式来实现,那不就可以实现关闭浏览器的时候session不会丢失吗。
session可以用URL路径来保存,如下面所示:
一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

欢迎大家参考有关Session与Cookie的讨论。

.

转载于:https://www.cnblogs.com/chhuic/archive/2009/09/26/1574399.html

关于关闭浏览器Session就丢失的讨论相关推荐

  1. python关闭浏览器删除session_Django操作session 的方法

    session是存放在服务端的,在django中使用session必须要先在数据库中创建django_session表,session相关信息都要依赖此表 获取session request.sess ...

  2. django关闭浏览器,怎样清除 cookies 和 session

    django关闭浏览器,怎样清除 cookies 和 session 设 置 Cookie: def cookie_set(): response = HttpResponse(" 设置 C ...

  3. python关闭浏览器、未过期的session_解决因为关闭浏览器造成session失效的假象

    session在服务端保存信息,是否关闭浏览器和session销毁无关,即:即使关闭浏览器,session还是存在的.但是为什么关闭浏览器后session好像就消失了. 1 session和cooki ...

  4. [Vuejs] Vue解决代理设置导致浏览器Session丢失的问题

    [Vuejs] Vue解决代理设置导致浏览器Session丢失的问题 参考文章: (1)[Vuejs] Vue解决代理设置导致浏览器Session丢失的问题 (2)https://www.cnblog ...

  5. 关闭浏览器cookie会消失?session也会消失?

    当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSES ...

  6. chrome的扩展程序,安装后,一旦关闭浏览器,扩展就会丢失

    chrome的扩展程序,安装后,一旦关闭浏览器,扩展就会丢失 不需要重装 chrome,删除 chrome 配置文件夹即可,例如WIN8/WIN7系统参考:c:\Users\Administrator ...

  7. alert点击完确定关闭浏览器窗口_关务实操技巧:单一窗口缓存4大清理方法,解决部分退单问题...

    前言 2018年"关检融合"之后,中国国际贸易单一窗口(下称"单一窗口")的使用范围进一步扩大.随着通关一体化.无纸化的推进,单一窗口越来越成为进出口企业关务人 ...

  8. Session莫名丢失的原因及解决办法[转载]

    Asp.net 默认配置下,Session莫名丢失的原因及解决办法 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成 ...

  9. 关闭浏览器 退出redis id_购物车增删改与清空,用Redis实现一下吧

    购物车管理包含功能:提交商品到购物车.显示购物车列表.删除购物车里商品.修改购物车.清空购物车等等 1. 购物车的实现方式: ① 可以把购物车的数据,给存储到 session 里面,一旦关闭浏览器,则 ...

最新文章

  1. 能量平衡_500kA 铝电解槽的能量平衡分析
  2. Linux运维系统工程师系列---25
  3. Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)...
  4. 【DHCP在企业中的应用】
  5. Apache Commons:Betwixt介绍
  6. C#中谁最快:结构还是类?
  7. 操作系统学习笔记-05-中断和异常
  8. javascript 将毫秒值转换为天-小时-分钟-秒钟
  9. <读书笔记> Thinking in python (Python 设计模式) 3. Proxy and State模式
  10. uniapp不同页面跳转传递数据
  11. C语言的代码内存布局
  12. 峰Redis学习(7)Redis 之Keys 通用操作
  13. Jconsole使用实例解说
  14. linux运行sokit,mac下的socket调试工具---sokit
  15. Redis6.2.6下载和安装
  16. CBR,VBR,ABR介绍
  17. 最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题
  18. 如何把一张照片的像素提高_能够充分提高照片像素的方法!
  19. 关于wav amr音频分析
  20. 服务器上传图片显示图片404,关于使用spring文件上传遇到的服务器中的图片访问不到报404的问题...

热门文章

  1. 瀑布流 颜色随机 加载滚动
  2. 思科认证网络工程师CCNA(更新完毕)
  3. 使用Go语言+Protobuf协议完成一个多人聊天室
  4. Python自动化开发学习22-Django上
  5. docker+open vswitch多宿主间容器互连构建tomcat服务
  6. Spark基础脚本入门实践2:基础开发
  7. Windows Error Report
  8. [转]C#读写xml文件
  9. 安装ORACLE 11G R2 +redhat es4遇到的问题
  10. Mysql常用的命令