怎么做到关闭浏览器时,服务器的session也清掉了?

怎么做到关闭浏览器时,服务器相对应的session也清掉了?

关闭的时候 触发一个事件,提交“退出”的请求

可能吗?我不是在做春秋大梦吧,自己写一个浏览器还有可能。

退出的时候触发一个javascript
window.onunload=userLogout;
然后在userLogout里用xmlhttp发送注销请求到服务器

不过不好的地方是window.onunload在刷新页面的时候也会触发

关闭浏览器的情况有很多种:

IE出错挂了; IE禁止了javascript;通过kill process杀死ie进程;

你说的情况不会一定发生.

> 关闭浏览器的情况有很多种:
>
> IE出错挂了; IE禁止了javascript;通过kill
> process杀死ie进程;
>
> 你说的情况不会一定发生.

ray_linn 你别在扯淡了,不知道就直说,别人说了方案,你又从那里拽异常关闭了,扯淡。

方案可不是拍拍脑子就出来的!session的客户端实现各个浏览器都不一样。比如ie,从登陆的界面中打开一个新窗口,新窗口的session id和老窗口是一样的,这样您关掉一个另一个岂不是也掉线了。http就是无状态,你要做到关浏览器同时清session,岂是说说就能做到?再考虑异常的情况,根本无法做到!

>>session的客户端实现各个浏览器都不一样
不同的浏览器只是对cookie的进程共享不一样,这影响解决方案吗?

>>新窗口的session id和老窗口是一样的,这样您关掉一个另一个岂不是也掉线了
我们假设每个页面都有这样的语句:往session的MAP对象里写一个类似于
value-url的MAP对。

refresh怎么办?判断是不是refresh,如果是就先用AJAX写一个负值的value-url的MAP对(负值只是为了好区别),然后页面刷新的时候再写的时候,判断有负值的value以及相同url,就直接去掉这个MAP对,就不再写了。

ctrlN怎么办?ctrlN不触发onunload相当与一新页面。照样写MAP。另外我们关注的是浏览器的窗口个数,不是MAP重复值。

同一页面的连接怎么办?做成这样 <a href="javascript:aa()" >dfghdfghdfg</a> aa()这个函数里转向,且发请求到server端去掉原来的value和旧的url,写一个负值的value以及转向的url,因为要保持一个浏览器。(这里浏览器会认为这是刷新)

target = blank的页面的连接怎么办?这很简单,没啥操作。

总之,session中的MAP对个数就是浏览器的个数,在每次remove的时候判断MAP对个数如empty了就invalidate掉。

至于异常的情况我说扯淡的原因:这不关做系统的事情,这很像偷换概念来压人,我并不能接管浏览器的事件或异常,你可以说要是操作系统异常怎么办?要是计算机当机怎么办?硬件燃烧怎么办?是的,所有异常的情况我无法做到关浏览器同时清session。

至于上贴发的东西全当我没说好了。对不起那位兄弟

说得好!佩服亚佩服~

兄弟:用xmlhttp发送注销请求到服务器的代码怎么写?

It is impossible unless you only open one browser.

我是这么做的,我有一个只要我的应用在就用云开着的jsp,我在此
退出的时候触发一个javascript打开一个到另外一个新的jsp,此jsp关闭session,但是我却不清楚怎么自动关闭这个新的jsp.

解决了。
在此页面的jsp中使用onBeforeUnload="closesession()" onUnload="closewin()",Ok了

spg_stone 你说的方法教教我,我现在就要这个干