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

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

如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程、死机等),服务器无法处理用户退出网站的请求,解决方式如下:

方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出
优点:能在短时间内判断出用户是否已经退出 缺点:增加用户请求次数,所消耗的服务器资源较大

方式2:使用cookie保存用户登录信息,不要设置cookie的过期时间,当关闭浏览器时,cookie会自动过期
优点:处理方便 缺点:用户浏览器不一定支持cookie,也就无法实现该方式

方式3:在页面中添加onunload事件,当关闭浏览器时,自动跳转到“退出”页面(loginout.action)
优点:退出时,能及时进行处理 缺点:当用户打开多个页面时,关闭任何一个页面都有可能导致用户的退出

方式4:记录用户的每次操作时间(包括页面刷新、提交表单等),在数据库中用作业每隔一段时间检查上次的操作时间,当操作时间大于一定的数值时,就认为该用户已经退出
优点:无论哪种非正常退出,都能够进行处理 缺点:进行检查的时间间隔不容易确定,如果用户在线,当长时间未操作,也会认为用户已经退出

方式5:等待session失效
优点:你可以不用做任何工作 缺点:用户可以在你等待的这段时间内重新登录。

时间: 2024-11-09 03:23:05

浏览器关闭使session失效的问题多种解决方式的相关文章

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

浏览器关闭后Session就会被销毁吗? Session是JSP的九大内置对象(也称为隐含对象)中的一个,用于保存当前用户的状态信息,初学者可能认为Session的生命周期是从打开一个浏览器发送请求到关闭浏览器,这是错误的. Session的运行机制 当用户第一次访问一个支持Session的Web应用时,会开启一个新的Session会话.当用户浏览这个Web应用的不同网页时,始终处于该Session中.具体而言: 1 当开启一个新的Session会话时,Servlet容器会创建一个HttpSes

adb命令具体解释(二)——手机缺失sqlite3时操作数据库的多种解决方式

在android应用开发无处不在SQLite数据库的身影.那么在开发中怎么使用adb命令操作数据库的功能呢? 以下我们将完整的介绍与数据库操作相关的命令集及当手机缺少sqlite3的时候的多种解决方式. 1.当手机缺失sqlite3时,怎样操作数据库 先来看看手机缺失sqlite3时候的效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/7

360浏览器下设置按钮失效的bug无法解决

表现一:注册页面无此bug 表现二:绑定手机页面有bug 表现三:可以设置其他按钮失效 但是不能设置自身失效 表现四:只有文字区域可以点击 非按钮文字区域不能点击 解决方法:重叠一个按钮用来显示提示语 设置原本的按钮文字为空 时间过后再恢复 原本的代码 var wait=60; function time(o) { if (wait == 0) { o.removeAttribute("disabled"); o.value="获取激活码"; wait = 60;

vb.net WPF webbrowser window.close 关闭后不触发 WindowClosing 事件 WNDPROC解决方式

 #Region "WPF 当浏览器窗体关闭时触发 Quit事件 " #If OnSourceInitialized Then Protected Overrides Sub OnSourceInitialized(e As EventArgs) 'onload 等句柄创建后引用WSInitialized(Me, e) WSInitialized(Me, e) MyBase.OnSourceInitialized(e) End Sub #Else Private Sub LyWeb

关闭浏览器后Session失效原因分析

参考文章:http://www.tuicool.com/articles/VNbYjqm 首先需要理解一下几点: 1.Http是无状态的,即对于每一次请求都是一个全新的请求,服务器不保存上一次请求的信息 2.Session是保存在服务端的,为什么后续请求会读取到session?因为请求会包含一个sessionId,该值存储在cookie中,服务器通过这个sessionId找到对应的session 3.cookie是有过期时间的,规则如下: Cookie的Max-Age决定了Cookie的有效期,

浏览器关闭后,Session会话结束了么?

今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了? 我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗 口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释: 当用户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的Session, 那么接下来当用户浏览这个Web应用的不同网页时,始终处于一个Se

session与cookie 浏览器关闭时的区别

session与cookie 浏览器关闭时的区别 cookie是存储在本地,当cookie在浏览器关闭的时候,再次打开是否记录之前的值,这跟cookie的过期时间设置有关. 如果cookie的过期时间分为两种 1,值为0或未设置:再次打开浏览器cookie值被清除. 2,time()+30*60:设置为30分钟,则再次打开cookie不会被清除. session存储在服务器,再次打开也分情况. 先看session的过程,在php中,session与浏览器是通过cookie来确定唯一值, 在php

浏览器关闭cookie后,session处理

我们都知道当在session 会话有基于cookie和基于url两种传递SESSIONID的方法.为了实现客户端禁止cookie发送的情况也不影响客户登陆网站,可以设置 php.ini中 session.use_trans_sid=1 ,表示当客户端浏览器禁止cookie的时候,页面上的链接会基于url传递SESSIONID.但是很多人仅仅设置了这一个选项并没有达到效果,本人也 遇到此问题,后来一番研究发现php.ini 文件中还有两个选项 session.use_cookies=1sessio

关于微信内置浏览器安卓端session丢失问题

项目上线测试,发现微信安卓端存在用户登录无法验证session情况, 导致每次接口请求都无法识别,而苹果客户端不会出现此问题,非微信环境打开不会出现此问题,找到一些解决方案做下记录: 方案1: 由于微信内嵌浏览器对所有请求都做了代理,导致出去的ip不固定,从而导致腾讯云服务器的黏性session(基于客户端ip做的黏性session)失效.所以,解决方案有两个,要么服务器端只用一台tomcat,要么tomcat做session共享,比如 session放在Redis中.这样server1产生的s