社区
Web 开发
帖子详情
关于保证web登陆用户唯一性的问题?
zhanghuazhanghome
2004-08-15 08:24:58
为了保证web用户登陆的唯一性,我们通常在用户信息表中设置一个字段。例如,用户A登陆后设置字段f_islogin=1,当有另外一个人用用户A再次登陆时,我们效验f_islogin是否为1,为1就禁止用户A的再次登陆,当用户A从这个网站退出时,我们用一个方法B将字段f_islogin重新置为0即可, 但是通常来说,用户从一个站点退出就是直接关掉这个网站的网页,我们的方法B是不执行的,请问有什么方法解决吗?或有别的思路告诉我,谢谢
...全文
640
20
打赏
收藏
关于保证web登陆用户唯一性的问题?
为了保证web用户登陆的唯一性,我们通常在用户信息表中设置一个字段。例如,用户A登陆后设置字段f_islogin=1,当有另外一个人用用户A再次登陆时,我们效验f_islogin是否为1,为1就禁止用户A的再次登陆,当用户A从这个网站退出时,我们用一个方法B将字段f_islogin重新置为0即可, 但是通常来说,用户从一个站点退出就是直接关掉这个网站的网页,我们的方法B是不执行的,请问有什么方法解决吗?或有别的思路告诉我,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
spiritsl
2004-08-19
打赏
举报
回复
在session中增加标志为,比如当一个用户a登陆前session.getAttribute("user","a");
如果存在则不能登陆,
否则
session.setAttribute("user","a");
登陆
superfishmanweb
2004-08-19
打赏
举报
回复
我总是觉得单独用缓存难控制,不安全,最好就配合数据库一起使用,哈哈!
MitnickChen
2004-08-19
打赏
举报
回复
有一种方法你可以考虑一下:
(1)建立一个Application("g_AllLoginAccount") = "";
(2)每登陆一个人,就把其帐号跟这个Application变量对比,看其是否含有该帐号;
(3)如果有,则提示该帐号已经登陆,然后再把其重定向到你想定向的页;如果没有,则把这个帐号的值追加到Applicaiton变量,并PASS!
tangbow
2004-08-19
打赏
举报
回复
可以用application呀
kingmaxno1
2004-08-19
打赏
举报
回复
我用了和 zhanghuazhanghome(517(张)) 差不多的方法,但是如果是点击右上用的关闭按钮关闭的话,退出监听的程序就不起作用,怎么解决呀
yyqllxh2004
2004-08-19
打赏
举报
回复
用session控制一下应该可以的
zhanghuazhanghome
2004-08-19
打赏
举报
回复
to superfishmanweb:
我现在的实现方式是这样的,用HttpSessionBindingListener监听用户的登陆情况。但是这种监听器要求在登陆和下线时判断用户是否已经存在,登陆时当然时可以的,在用户点击登陆按钮时加代码判断即可,没有登陆就将用户帐号放入一个vector中,但用户退出网站时我没有方法保证用户一定触发我的事件(将用户名从vector删掉),我暂时按照一下方法处理,定义一个String数组data放在vector中(data[0]=用户IP,data[1]=用户最后一次操作我的网站的时间,data[2]=用户帐号),代码判断方式如下:
for(int i=0;i<vec.size();i++){
String clientIP=用户IP
String username=用户帐号
long curtime=new Date().getTime();
String[] data=vec[i];
if(username.equals(data[2]){
if(data[0].equals(clientIP)){
//同一个IP登陆,就是在一台机器上再次登陆,就让其登陆了,更新data[1]即可
}else if(IP不同 && 登陆时间和data[1]中相差了20分钟(session过期时间)以上){
//允许登陆,更新data[0],data[1]
}
}
}
vec中没有匹配的,即新用户登陆,允许即可
但这样还有个问题存在,我设置的时间为20分钟,如果一个用户帐号20分钟一直在使用,我就不能将其使用的这段时间算在过时的20分钟内,
问一下,有没有什么监听器可以知道用户在我的网站的浏览?HttpSessionListener也不行的
zhanghuazhanghome
2004-08-19
打赏
举报
回复
IP判断的缺陷还有一个:如果用代理上网,只能得到代理的IP,这样可能20分钟内所有用这个代理的用户都不能进来了
zhanghuazhanghome
2004-08-19
打赏
举报
回复
至于用Application,我的实现方法类似于它,但是缺陷同样,假如设置session过期时间20分钟,如果我登陆后关闭IE退出网站,恐怕20分钟内这个用户就不能用了吧,我的IP判断的方式,起码同一台机器可以随意登陆
zhanghuazhanghome
2004-08-19
打赏
举报
回复
的确,登陆时判断用户是否已经存在实在是简单不过,因为用户必须点击我们的登陆按钮我们才允许其进入我们的系统,但退出呢?如果每一个客户增加一个基本字段,置一个标志,我退出是直接关闭了IE,那么除非重启server,或手工到库中update标志,否则,这个用户就再也不能用了,不是吗?
suntmbxh
2004-08-19
打赏
举报
回复
一般来说,Web服务器是用session来跟踪客户的状态的,因为客户登录后,Servlet 容器会为客户分配一个唯一的标识符,即Sessin ID,然后客户登录时你应该将客户的登录信息保存在session中(因为每个客户都有一个session,所以不会弄错),session.setAttribute("username",username)`中,然后你在每个网页中都对session进行验证,例如session.getAttribute("username")的值是null,那就是未登录就访问该网页的,这样就可以知道谁在访问该网页,同时你可以设置最大时间,如20分钟,过时就算自动退出.
至于说重复登问题,你可以在数据库为每一个客户增加一个基本字段,即客户状态,如1表示已登录,0表示未登录,然后在客户登录时只要检查一下该字段的值就行了,在客户退出时或超时时,把客户状态字段改为0就行了,
edhappy
2004-08-17
打赏
举报
回复
学习一下
shanzaid
2004-08-17
打赏
举报
回复
0210(DBoy) 能不能说的详细一点,怎么实现?
power17
2004-08-17
打赏
举报
回复
我的方法很笨,就是在数据库中另外添加一个标志变量,如boolean flag.开始时让它=false
登陆以后让它变成true(这个容易),关闭时变成false(这个是不是要用到javascript).每次
登陆时检查这个值是什么,是true,说明已经登陆。
只是随便说说。
世宝宝
2004-08-17
打赏
举报
回复
这些东东使用缓存就行啦,数据库操作太昂贵了
superfishmanweb
2004-08-17
打赏
举报
回复
如果用attributelistener就可以监听到sessionid的创建与关闭的情况.而我在上面提到的另外一种方法是退出(或刷新的时候,因为用的是onunload)的时候用window.open打开一个不可见的页,在页里面再判断其它的页有无关闭(包括自己那一页),至于判断的方法是用sessionid,和window.opener.closed等的组合使用(根据不同的情况组合).
zhanghuazhanghome
2004-08-15
打赏
举报
回复
to superfishmanweb:我要的效果是当一个人用帐号a登陆后,别人不能同时用a登陆,另onUnload方法是可以,但我怎么判断下列情况 ,用户打开了我的网站上的A,B,C三个页面,怎样知道那个页面最后关闭?
zero_3
2004-08-15
打赏
举报
回复
我只是听懂了问题,没明白楼上怎么实现的。:(
superfishmanweb
2004-08-15
打赏
举报
回复
刚好做完这东西,方法就是利用application在第二次登陆的时候将第一次的sessionid失效,然后再从设置过。最好配合数据库来用退出的时候就在利用onunload运行一个不可见的弹出窗口进行数据库的操作。
还有一种方法是用AttributeListener+SessionListener来做。这种方法我掌握得不好所以用了上面那一种,效果不及这个因为这个方法的逻辑结构比上面的简单但技术水平要高一点。
张海霖
2004-08-15
打赏
举报
回复
张三登录是检查session("张三")是不是空,是空,就允许,不是空就不允许。
Web
前端开发新人入门课程
适合人群 1. 零基础,对
WEB
前端开发感兴趣的朋友 2....培养自己动手写代码能力、独立解决
问题
以及
web
开发能力。课程精细,页面丰富、设立了大量的演示案例、纯动手操作一步一步完成一个综合性的站点。
java登录唯一_
保证
用户
唯一登录的思路
现在做的一块app 查药专家,需要限制
用户
唯一
登陆
,参考了网上的代码,简单实现了一下实现HttpSessionAttributeListener ,监听addAtrribute事件package com.kbs.platform.filter;import javax.servlet....
用户
登录
唯一性
验证(检查
用户
登录状态 是否同一浏览器地址登录)
核心是通过 缓存、Cookie以及SpringMVC拦截器 实现
登陆
时以
用户
id为key在缓存中保存时间戳 在cookie中以一个全局变量为key保存时间戳 String times = new Date().getTime() + ""; memCache.put(userId ...
如何
保证
接口幂等性?
幂等性要求任意多次执行对资源本身所产生的影响均与一次执行的影响相同,如果不
保证
幂等性,在发生如下情况时就会出现
问题
: 前端重复提交表单: 在填写一些表格时候,
用户
填写完成提交,很多时候会因网络波动没有...
保证
文件名的
唯一性
在项目开发中,经常会有文件上传和下载的功能,上传的文件会保存在指定的地方,比如,mongodb数据库中、FTP文件服务器中、或者保存在某个路径下,需要
保证
上传文件名称的
唯一性
一般的方法就是使用时间戳、或者使用...
Web 开发
81,094
社区成员
341,711
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章