精华内容
下载资源
问答
  • 购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立。   首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制。针对所...
    
     Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端。购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立。 

            首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制。针对所需要解释的问题,做这样一个假设:我们第一次访问一个网页。当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个session都会有一个sessionID。服务端会自动将这个sessionID作为一个cookie附加到response上返回给客户端,这个cookie存放在浏览器内存中。我们每次对此网页发送的request都会附带着这个cookie,服务端收到这个请求后会都去cookie中取得这个sessionID,然后查询服务端是否存在一个对应此ID的session对象。如果有,可以直接使用此session;如果没有,则会新建一个。当浏览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。 

            那当我们关闭浏览器之后,服务器端原来的session对象是否还存在呢?答案是肯定的。服务端根本不知道我们是否关闭了浏览器,也不关心这个。客户端与服务端之间进行通信的唯一途径就是通过请求。服务器有自己的一套机制来管理session,比如多长时间会清除没有使用过的session对象,等等。 

            所以说,关闭浏览器session就被清除只是我们所看到的表面现象(实际上是新建了一个session对象),通常情况下,服务器并不会马上清除session对象,但这个根据服务端的设定而不同。 

            PS:cookie一般分为两种:一种是会话cookie,即服务端为session自动创建的cookie,这个cookie存放在浏览器进程中。另一种是可以存放在硬盘上的,可以通过服务端的某些设置,将一些信息放到cookie中并返回给客户端存放在硬盘上。 
    php是根据php.ini全局配置:
    session.gc_probability = 1

    session.gc_divisor    = 100

    session.gc_maxlifetime = 1440

    这三个配置组合构建服务端session的垃圾回收机制

    session.gc_probability与session.gc_divisor构成执行session清理的概率,理论上的解释为服务端定期有一定的概率调用gc函数来对session进行清理,清理的概率为:gc_probability/gc_divisor 比如:1/100  表示每一个新会话初始化时,有1%的概率会启动垃圾回收程序,清理的标准为session.gc_maxlifetime定义的时间。




    展开全文
  • Please help me anyone Thanks & Regards Chakri 解决方案 If you could get the browser to (reliably) notify the server that the user had closed the window, then the server could call session.invalidate...

    I am trying to clear the HttpSession if the consumer close the browser window. I dont know how to do it, Please help me anyone

    Thanks & Regards

    Chakri

    解决方案

    If you could get the browser to (reliably) notify the server that the user had closed the window, then the server could call session.invalidate() as per the original Answer provided by ejay_francisco.

    The difficulty is getting the notification to happen reliably. There are various ways to detect the window close; e.g. as covered by these Questions (and similar):

    You could then write the (javascript) close event handler to send a specific request to the server.

    However, I don't think any scheme is going to be able to deal with cases where the user's browser dies, the user's machine is shut down, and similar scenarios. So if you need the session to be cleared 100% of the time, then you are probably out of luck. I don't think it can be done.

    展开全文
  • 对于做web开发的人,不管用ASP.NET JAVA还是其他,都会...关闭浏览器Session真的会丢失吗?先让我们来看下session机制。 session机制session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能...
    对于做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就消失了吗

    万次阅读 2018-03-28 21:34:30
    以前一直以为cookie就是一直保存在客户端的会话信息,而session是保存在服务器断的会话信息,浏览器关闭以后就会被清除,今天看帖子突然发现 大错特错,搜了些帖子以及博客详细看了下,都是讲会话cookie和持久cookie...

        以前一直以为cookie就是一直保存在客户端的会话信息,而session是保存在服务器断的会话信息,浏览器关闭以后就会被清除,今天看帖子突然发现 大错特错,搜了些帖子以及博客详细看了下,都是讲会话cookie和持久cookie,结果发现session就是cookie 
    http://rubyeye.iteye.com/blog/196117 这个讲的浅显易懂

       

        当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set- Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,此信息是服务器随机生成的,放在服务器内存里,为 了标识唯一的客户端用户,内容不会重复,这就是sessionid. 
       当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一 个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在 请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话. 
       可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因 为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和 sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才 释放内存). 
       上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现 了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等. 
       如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了.

       cookie分析的例子 http://hhlux.iteye.com/blog/334729 

     

    引自:http://crud0906.iteye.com/blog/575661

     

     


    另一篇解释:

    在学习servlet时会发现,关闭浏览器,再打开新浏览器并发送请求,会生成了一个与关闭浏览器之前不同的新的session对象。所以初学者会有这样一种理解,就是浏览器关闭后服务端会清除session对象。但实际上是不是这样的呢? 

            Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端。购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立。 

            首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制。针 对所需要解释的问题,做这样一个假设:我们第一次访问一个网页。当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个 session都会有一个sessionID。服务端会自动将这个sessionID作为一个cookie附加到response上返回给客户端,这个 cookie存放在浏览器内存中。我们每次对此网页发送的request都会附带着这个cookie,服务端收到这个请求后会都去cookie中取得这个 sessionID,然后查询服务端是否存在一个对应此ID的session对象。如果有,可以直接使用此session;如果没有,则会新建一个。当浏 览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由 于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。 

            那当我们关闭浏览器之后,服务器端原来的session对象是否还存在呢?答案是肯定的。服务端根本不知道我们是否关闭了浏览器,也不关心这个。客户端与 服务端之间进行通信的唯一途径就是通过请求。服务器有自己的一套机制来管理session,比如多长时间会清除没有使用过的session对象,等等。 

            所以说,关闭浏览器session就被清除只是我们所看到的表面现象(实际上是新建了一个session对象),通常情况下,服务器并不会马上清除session对象,但这个根据服务端的设定而不同。 

            PS:cookie一般分为两种:一种是会话cookie,即服务端为session自动创建的cookie,这个cookie存放在浏览器进程中。另一 种是可以存放在硬盘上的,可以通过服务端的某些设置,将一些信息放到cookie中并返回给客户端存放在硬盘上。 

           

    •         在以下情况中,session会结束生命周期,Servlet容器会将session所占用的资源释放掉: 
             
    • 客户端关闭浏览器(虽然不是这样,但还是这么说吧,解释参见上面)        
    • Session过期        
    • 服务器端调用了HttpSession的invalidate()方法        

     

    引自:http://hi.baidu.com/xmj_33/blog/item/bcebfec9c9250093c817689e.html


    展开全文
  • 当在前台取出session时,关闭浏览器后再次访问服务器,这时服务器返回了一个null,此时的返回的session并非之前的那个session而是一个新的session。 -->先来看看session的生命周期:  创建:当getSession()后...
  • 关闭浏览器Session失效.

    千次阅读 2009-06-09 18:46:00
    1、onunload调用下面js函数 <!-- function removeline(){ if(event.clientX){ document.write(); document.all.WebBrowser.ExecWB(45,1); } } // -->
  • cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成,发送给浏览器浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次...
  • 如题,请问关闭浏览器 session是不是被销毁,session的主要应用有哪些啊?
  • 以前一直以为cookie就是一直保存在客户端的会话信息,而session是保存在服务器断的会话信息,浏览器关闭以后就会被清除,今天看帖子突然发现大错特错,搜了些帖子以及博客详细看了下,都是讲会话cookie和持久cookie...
  • [img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img]
  • 关闭浏览器销毁session

    千次阅读 2011-07-06 15:03:51
    今天在处理用户在线状态查看时,碰到一个问题:如果用户关闭浏览器,在IE下,通过处理 页面unload时,document.location可正常触发销毁session的跳转,但google的chrome却无效,那么,到底有没有方法使chrome也生效...
  • 关闭浏览器后的session

    千次阅读 2016-08-10 14:21:04
    换句话说,用户关闭浏览器,Session也就死掉了,不存在了. 当你从新打开浏览器访问网页时,服务器会从新分配一个Session, 但这个Session已经不是原来的那个了. 若在页一创建了Session,在页二访问Session对象 如果...
  • laravel关闭浏览器释放session

    千次阅读 2017-08-11 12:05:29
    打开laravel目录的 config->session.php 修改配置项目 这个配置项是session的过期时间,单位是分钟 ...这个配置项是关闭浏览器session是否消失,默认是false不消失,改为true就消失了 'expire_on_close' => true,
  • 关闭浏览器清除SESSION

    2010-03-18 20:21:00
    一直以来都说因为无法捕获客户端是否把浏览器关闭,所以用户关闭IE浏览器后,无法清除session。但个人想的一个方法不知道是否可行: function RunOnUnload() { //提交一次,清除session}
  • 请求项目接口后浏览器保存的sessionId与服务器不一致,拿Postman测试如下图,网上找了很久都没发现有人发过这个问题,只能自己去找了spring session的深入分析一系列文章以及阅读源码,最后结合到今天找到的一个帖子...
  • 客户端关闭浏览器会将本地的保存session的cookie对象内存释放掉,但是服务器端保存的session对象内存依然保存, 并没有立即释放掉,这时候你可以主动释放掉session内存,可以调用invalidate方法。 在j2ee中学习...
  • session在服务端保存信息,是否关闭浏览器session销毁无关,即:即使关闭浏览器session还是存在的。但是为什么关闭浏览器session好像就消失了。 参考:https://my.oschina.net/kevinair/blog/192829 1 ...
  • 当我们的浏览器首次访问服务器的某个servlet的时候会创建一个新的session对象(如果这个被访问的servlet有获取session对象的语句) 后会把此session对象的id号码通过cookie的方式回写到客户端浏览器,只不过默认的...
  • 每个session可以理解为有一个自己唯一的sessionId,关闭浏览器,再打开,有附带创建一个新的sessionId,这个sessionId是空的,导致误认为session失效,其实本质上讲是sessionId没找到. 当然如果浏览器关闭的话cookie是会...
  • 解决关闭浏览器session失效,解决方法在最后. 在使用到session时,有讲到一个session的过期时间,默认是30min,这个值可以在tomcat &gt; conf &gt; web.xml中查看修改 可以看到配置文件中默认是30min,按理...
  • chrome浏览器 sessionId不缓存问题

    千次阅读 2020-09-02 13:53:32
    因为重定向地址后产生跨域问题,Chromecookies默认不缓存,导致session ID 改变。解决办法
  • 然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分 session 机制都使用会话 cookie 来保存 session id,而关闭浏览器后这个 ...
  • 我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗口发送请求到关闭浏览器窗口,但其实这种说法是不....
  • 关掉浏览器时清除session

    千次阅读 2008-09-01 09:31:00
    本来想用fiter过滤后台登录,可是,当你给一个flag时,它实际还是存储在session中,这样的话,在我把url直接跨过框架指向一个新增或者其它后台页面时,只要session中登录过保存的值,直接关闭后,还是没有清除,因此...
  • session保存在服务器,而sessionId通过Cookie发送给客户端,但这个Cookie的生命是-1,即只在浏览器内存中存在,也就是说如果用户关闭浏览器,那么这个Cookie就丢失了。 当用户再次打开浏览器访问服务器时,就不会...
  • 因为目前项目是基于session来判断当前用户的详细情况,从一致性和可靠性来考虑,应该确保一个session一个用户。
  • 我们知道在正常情况下,发送http请求时,消息头中会自动携带cookie信息,这其中就会包括SESSIONID信息,所以只要我们没有关闭浏览器,消息头中都会自动携带这个信息,以供服务器访问相应的session。 但是如果我把...
  • 直接关闭浏览器(或者强制关闭浏览器进程、死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,060
精华内容 53,624
关键字:

关闭浏览器session