页面长时间未操作,实现自动退出登录原理

本文介绍了两种实现页面长时间无操作后自动退出登录的方法。第一种是后端通过session管理,设置过期时间,检测sessionId变化重定向到登录页。第二种是前端定时轮询登录态,对比登录态变化,若过期则提示用户重新登录。登录态通常用session或token来标识用户状态,分为存储型、计算型和计算与存储结合三种类型。在登录成功后,后端会返回加密的token,前端解析并验证登录态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

页面长时间未操作的时候,会自动退出登录,并且提示你的登录已过期,需重新登录。那这个是怎么实现的呢?


两种方案

第一种是完全由后端实现的,后台在servlet可以获取到session,可以设置一个十分钟(这个时间根据你的需求而定)的过期时间,过期sessionId会重新生成,后端直接判断当前sessionId是否更改,判断完后直接重定向到登录页面。

第二种是由前端和后端配合实现的,当我们登录系统时,在登陆后,后台会种一个指定时长的登录态到cookie;前端的原理很简单,就是轮询登录态,发现登录态过期了,就弹框提示
代码如下:

	// 1.获取本地登录态;
	let userCookie = $.cookie( 'appid ');
	// 2.轮询登录态
	let timerId = setInterval(()={
	// 判断当前获取的登录态和之前获取的登录态是否一致
	if($.cookie( 'appid') != usercookie){
		// 不一致时,估计是不同用户登录
		// 继续判断当前登录态是否过期	
		if(typeof $.cookie( 'appid') == undefined && typeof userCookie != undefined)E
			// 登录态过期则弹窗提示
			alert("您的登录已过期请重新登录");
		}
	}},1000)


关于它的Tips:

登录态:在服务端一般会使用session或者token来表示用户的登录状态,用来标识这个用户的身份。

登录成功后,后端会给session设置一个字段,给字段设置对应的值,过期失效后这个值就会变成空或者undefined之类的。

登录态的解析一般就是入参是token,而返回结果是userId的方法(或服务、接口),第一次登录成功时,后端会把用户信息加密生成一个token,通过登录接口返回给前端 ;解析登录态时,前端通过发请求调接口的方法把token传到后台,由后端解析判断


登录态的几种类型:

1.存储型token
存储型token,就是根据token这个字符串,可以在服务端存储上查到用户信息,那就是校验成功,如果查不到,那就是校验失败。

2.计算型token
计算型token,就是把用户信息如userId加密成一个字符串,这个字符串就是token,那么每次解析其实就是解密,解密出明文,比如userId,generateTimestamp,那么再根据generateTimestamp判断是否过期,如果解析都失败了,那就直接失败。

3.计算和存储
考虑到计算和存储的优劣势,我们可以考虑结合他们。这里举个例子token是个加密后的密文,解密后可以分成好几个字段,分别代表userId,generateTime,randomString。那么,如果解析都失败了,那就直接失败了,如果解析成功了,再根据generateTime来判断是否过期,如果过期了,那也直接失败了,如果都通过了,在拿randomString去存储中查询,以Redis为例,我们的存储结构可以设计成key是userId,value是sorted set,其中每个元素就是randomString,查得到就是合法,查不到就是非法。

来源:简书
作者:Christine的学习日记
链接:https://www.jianshu.com/p/7829f6ece110

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值