社区
Web 开发
帖子详情
用户登陆问题:同一个用户帐号,在同一时间内只能一个人使用。在线等了。
xiaohua223
2005-02-24 05:44:51
水平有限呀,高手给个详解。
...全文
576
22
打赏
收藏
用户登陆问题:同一个用户帐号,在同一时间内只能一个人使用。在线等了。
水平有限呀,高手给个详解。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
金融科技-SpringBoot231MyBatisPlus332Layui256EasyWeb318-四方支付系统商户管理运营后台资金结算交易监控风.zip
金融科技_SpringBoot231MyBatisPlus332Layui256EasyWeb318_四方支付系统商户管理运营后台资金结算交易监控风.zip【vmware虚拟机安装】资源征集
java kotlin demo-Kotlin资源
demo for java and kotlin
2025713.pdf
2025713.pdf
Docker容器如何绑定宿主机外部IP与端口详解
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 Docker让容器通过外部访问或容器互联来提供网络服务。用 myfirstapp 镜像演示: 外部访问容器 容器启动后,若其中运行网络应用,可用 -p 或 -P 指定端口映射。 a.
使用
-P(大写)时,Docker 会随机挑选
一个
宿主机端口映射到容器内部暴露的端口。 示例: dockerrun−d−Pmyfirstapppythonapp.py docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
(完整word版)基于MATLAB的水箱液位控制系统的设计与.doc
(完整word版)基于MATLAB的水箱液位控制系统的设计与.doc
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章