社区
Web 开发
帖子详情
用户登陆问题:同一个用户帐号,在同一时间内只能一个人使用。在线等了。
xiaohua223
2005-02-24 05:44:51
水平有限呀,高手给个详解。
...全文
568
22
打赏
收藏
用户登陆问题:同一个用户帐号,在同一时间内只能一个人使用。在线等了。
水平有限呀,高手给个详解。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lurrix
2005-02-25
打赏
举报
回复
这里的讨论很热烈,不过首先得澄清,这个问题不叫单点登陆,呵呵,单点登陆指的是sso,感兴趣的朋友可以看看josso。
tly同学的回复只能说找到问题的一种解决办法,但实现的代码是有问题的:
1。多线程安全;
2。sessionCreated访法没有做任何实现的工作。
starsoulxp
2005-02-25
打赏
举报
回复
单点登陆,也可以根据网卡物理地址
mask85
2005-02-25
打赏
举报
回复
我想把Bean做成单例模式不就可以了?
dadunqingwa
2005-02-25
打赏
举报
回复
学习中,参照转的哪个帖子配置下吧……
guestroad
2005-02-25
打赏
举报
回复
up
congbailing_914
2005-02-25
打赏
举报
回复
楼上的haohaohaohao1 哈哈,在这又见到你了!
我也血洗一下,顶!!!!
taoxuwen
2005-02-25
打赏
举报
回复
学习 up
bp69
2005-02-25
打赏
举报
回复
用application简单
luoyefeng
2005-02-25
打赏
举报
回复
如果要管理费正常退出,可以用一个全局bean进行轮询,在设定的时间内如果没有获得用户的请求,就自动退出
shloshlo
2005-02-25
打赏
举报
回复
gz
tlg
2005-02-24
打赏
举报
回复
说明:这是转帖
tlg
2005-02-24
打赏
举报
回复
发现对于登录问题的解决都说用session监听,但是没有人写出示例代码,今天写了一个,希望对大家有所帮助.
解决同名用户登录的问题,类似QQ,即同名用户第二次登录,第一次登录的用户就掉线.
SessionListener.java监听session的类,部署于/App/WEB-INF/classes/com/test下(其中App为你的应用程序目录)
package com.test;
import javax.servlet.http.*;
import java.util.*;
public class SessionListener implements HttpSessionListener{
private static HashMap hUserName = new HashMap();//保存sessionID和username的映射
/**以下是实现HttpSessionListener中的方法**/
public void sessionCreated(HttpSessionEvent se){
}
public void sessionDestroyed(HttpSessionEvent se){
hUserName.remove( se.getSession().getId() );
}
/*
* isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法
* @param sUserName String-登录的用户名称
* @return boolean-该用户是否已经登录过的标志
*/
public static boolean isAlreadyEnter(HttpSession session,String sUserName){
boolean flag = false;
if(hUserName.containsValue(sUserName)){//如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在hUserName中)
flag = true;
//遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和username)
Iterator iter = hUserName.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
if( ( (String)val ).equals(sUserName) ){
hUserName.remove(key);
}
}
hUserName.put( session.getId(),sUserName );//添加现在的sessionID和username
System.out.println("hUserName = " + hUserName);
}
else{//如果该用户没登录过,直接添加现在的sessionID和username
flag = false;
hUserName.put( session.getId(),sUserName );
System.out.println("hUserName = " + hUserName);
}
return flag;
}
/*
* isOnline-用于判断用户是否在线
* @param session HttpSession-登录的用户名称
* @return boolean-该用户是否在线的标志
*/
public static boolean isOnline(HttpSession session){
boolean flag = true;
if( hUserName.containsKey( session.getId() ) ){
flag = true;
}
else{
flag = false;
}
return flag;
}
}
web.xml部署于/App/WEB-INF下
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
<web-app>
<listener>
<listener-class>
com.inspirer.dbmp.SessionListener
</listener-class>
</listener>
</web-app>
应用部分
1.在你的登录验证时,调用SessionListener.isAlreadyEnter(session,"admin")
既可以判断该用户名的用户是否登录过,又可以使上次登录的用户掉线
2.其他页面调用SessionListener.isOnline(session),可以判断该用户是否在线.
写的应该比较详细了,希望对大家有所帮助.希望大家能提提修改的意见,认为可以的朋友帮忙UP一个!!
最后祝大家春节快乐,合家团圆
xiaohua223
2005-02-24
打赏
举报
回复
登录了的做个标志就可以了,退出了怎么去除标志。
kaymo
2005-02-24
打赏
举报
回复
登录了的做个标志就可以了
或写个共通方法
knight_yl
2005-02-24
打赏
举报
回复
jFresH_MaN的思想不错,具体的还要自己做.
开始不要这么多了
Building
2005-02-24
打赏
举报
回复
jFresH_MaN(The answer is ......),依照你的方法,如果用户非正常退出呢?比如直接关闭浏览器
wjr1982et
2005-02-24
打赏
举报
回复
楼上的高手我要修改的是 session.setAttribute("isLog",new String("0"));这里吗?
修改成:application.setAttribute("id","login");吗?
--------------------------------------------------------------------------------
session也是可以的,成功登陆,isLog为1。当其他用户也登陆这个ID时,就可以判断isLog
为1时,就不允许他登陆
xiaohua223
2005-02-24
打赏
举报
回复
我是笨鸟,能不能讲慢点。
wubai250
2005-02-24
打赏
举报
回复
jFresH_MaN(The answer is ......)的想法不错,还简单
xiaohua223
2005-02-24
打赏
举报
回复
我是初学:这个登陆的代码:
loginto.jsp:
<%
//获得请求的参数。
String id=request.getParameter("id");
String psw=request.getParameter("password");
//连接数据库
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection con=java.sql.DriverManager.getConnection("jdbc:mysql://127.0.0.1/gold?useUnicode=true&characterEncoding=GB2312","root","123456");
Statement statement=con.createStatement();
ResultSet result=statement.executeQuery("select *from id where userId='"+id+"' and password='"+psw+"'");
session.setAttribute("isLog",new String("0"));
if(result.next())
{
session.setAttribute("isLog",new String("1"));
response.sendRedirect("denglu.jsp");
result.close();
statement.close();
con.close();
}
else
{
//session.setAttribute("isLog",new String("0"));
response.sendRedirect("error.html");//账号或密码错误,转入错误页面
result.close();
statement.close();
con.close();
}
%>
楼上的高手我要修改的是 session.setAttribute("isLog",new String("0"));这里吗?
修改成:application.setAttribute("id","login");吗?
加载更多回复(2)
“秒杀”是什么?简单来说即使在同时间有大量请求抢购买同一商品并交易
简单来说即使在同时间有大量请求抢购买同一商品并交易,因此会涉及大量并发写和并发读。 所以说“秒杀”对程序开发者有很大的的挑战。 怎么防止系统在应对百万级请求时候而不出故障? 怎样保障高并发状态下数据的...
oracle19cRAC_同步2套rac到同一台服务器dg+单实例dg
一课程主题 把2套19c的oracle的rac同步到同一台dg服务器。 彻底明白rac和dg的安装过程。 二课程特色 课程以实践为主,从头到尾一步一步教学员怎样操作,实践性强 模拟生产需求,完全可以把这套环境拿到生产...
Selenium3分布式与虚拟化
结合课程(书籍中提供的)软件,多练习,多思考 【学习前提】 1. 具备python3语言基础 【学习人群】 1. 手工测试人员学习UI自动化测试技能 2. 开发人员转岗测试开发岗位 3. 如具有丰富的自动化测经验,本课程可能并...
python线程进程、异步IO
具有多线程能力的计算机因有硬件支持而能够在
同一时间
执行多于
一个
线程,进而提升整体处理性能。 该章节主要包括线程进程的概念,基于python的线程进程实现,GIL锁的影响,消费者生产者模型,进程池的应用以及IO...
英特尔实时计算高级课程
现今边缘端正在向软件定义的解决方案转型,其中
一个
关键要素是需要在同一系统上支持实时以及非实时工作负载。系统的实时性主要体现在时间同步和及时性:时间同步利用软硬件协调各模块之间时钟,同时与外部设备时钟...
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章