防止多人使用统一用户上网和用户非正常退出注销问题-JSP教程,资料/其它

本文主要是介绍防止多人使用统一用户上网和用户非正常退出注销问题-JSP教程,资料/其它,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,不要完全靠session来控制,session会有一个失效时间,这个时间不宜设的太短,否则正常工作会受影响。用监听事件的方法也是不可取的,事实上这个事件也会等到session过期的时候才会触发。
2,可以采用隐藏桢的方式来检测用户的在线,这个时间可以设的比较短。比如5分钟。就像dev-club.com一样。在这个桢里得到用户名,当时的ip,以及访问时间。记录在application中。
3,当另有用户来访问的时候,就判断在application的数据,如果已经有该用户的访问记录,就按ip和时间来判断,是否可以继续。比如说ip不同,但时间隔了很久了,就允许访问。
4,你还可以再写一个后台进程来对application中的过期数据进行清理。
5,对于使用代理或网关访问的用户判断可以这样,session对象有一个方法叫getid(),可以得到一个唯一的id。即使使用同一ip来访问,这个id也是不同的,可以加以区分。

嗯。以上都是理论。我没有做过。但应该是可行的。



原问题
xinlcao 于 2002-12-21 11:06:09 加贴在 java程序设计 ←返回版面         
请高手帮忙,遇到两个问题:
1、如何限制同一账号在同一时间只能有一名用户使用,即防止多人使用统一用户上网;
2、如何在用户直接关闭浏览器而不是按退出按钮时注销用户。
我不知道这两个问题能否在b/s结构中很好的解决,请高手指点。
下面是我的想法和疑惑:
1、可以通过cookie或session取得用户登陆的记录,但由于http协议的连接不连续,如果两个用户用同一账号上网,只要不是同时向服务器请求,就无法知道到底是不是合用同一账号,曾想试着同时记录用户上网时的用户名和ip地址,只要在一定时间内登陆的同一用户名对应的ip地址不同,即可认为是合用同一账号,但又引出两个新的问题:(1)如果两个用户在网吧上网或有代理服务器的内部网上网,则获得的ip地址也可能相同;(2)如果一个用户拨号上网,突然计算机死机或突然网络中断,当他再次上网时,由于拨号每次ip都可能不同,系统将把它当作另一个用户处理。
2、想过制作一个记录用户登陆信息的类class userlogin,然后启动一个线程不停的定时查看登陆用户的信息,根据一定的规则检查用户的合法性,但也无法解决上面的问题。
3、对于用户非正常退出的注销,曾试着用监听session的值来判断:
public class userlogin implements httpsessionbindinglistener:声明类时引入监听器
public void valueunbound(httpsessionbindingevent e):获得session时的事件
public void valuebound(httpsessionbindingevent e):获得用户登陆时向session写入数据时的事件
一个用户登陆时好判断,只要从e中得到当时的session,然后从中获得向session中写入的变量和值,但是当用户由于session失效退出时,又无法判断,因为这时无法知道是哪个用户退出了,从e中获得的session已经是实效的了。
先谢谢大家的帮忙!!!帮忙帮忙

参见:http://www.dev-club.com/club/bbs/showannounce.asp?id=1839973  

这篇关于防止多人使用统一用户上网和用户非正常退出注销问题-JSP教程,资料/其它的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945059

相关文章

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束