用户登陆问题:同一个用户帐号,在同一时间内只能一个人使用。在线等了。

xiaohua223 2005-02-24 05:44:51
水平有限呀,高手给个详解。
...全文
591 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)
代码下载地址: https://pan.quark.cn/s/b4a8e0160cfc 齿轮与轴系零件在机械设备中扮演着至关重要的角色,它们负责实现动力传输、调整运动形态以及承受工作载荷等核心功能。 在机械工程的设计实践中,齿轮和轴系的设计是一项关键的技术任务,其内容涵盖了材料选用、构造规划、承载能力分析等多个技术层面。 下面将系统性地介绍《齿轮及轴系零件结构设计指导书》中的核心知识点。 一、齿轮设计1. 齿轮种类:依据齿廓轮廓的不同,齿轮可划分为直齿齿轮、斜齿轮以及人字齿轮等类别,各类齿轮均具有特定的性能特点与适用工况,能够满足多样化的工作环境与载荷需求。 2. 齿轮规格参数:模数大小、压力角数值、齿数数量、分度圆尺寸等是齿轮设计的基础数据,这些参数直接决定了齿轮的物理尺寸与运行性能。 3. 齿轮材质选用:齿轮材料的确定需综合评估其耐磨损性能、硬度水平以及韧性表现,常用的材料包括铸铁、钢材、铝合金等。 4. 齿轮强度验证:需进行齿面接触应力分析与齿根弯曲应力分析,以确保齿轮在实际运行过程中不会出现过度磨损或结构破坏。 5. 齿轮加工工艺:涉及切削加工、滚齿加工、剃齿加工、淬火处理等工艺流程,工艺方案的选择将直接影响齿轮的加工精度与使用寿命。 二、轴设计1. 轴的分类方式:依据轴在机械装置中的功能定位与受力特点,可将轴划分为心轴、转轴以及传动轴等类型。 2. 轴的材料选择:通常采用钢材作为轴的材料,例如碳素结构钢或合金结构钢,特殊需求时可选用不锈钢材料或轻质合金材料。 3. 轴的构造规划:需详细考虑轴的轴向长度、截面直径、键槽布置、轴承安装位置等要素,以满足轴的强度要求、刚度要求以及稳定性要求。 4. 轴的强度验证:需进行轴的扭转强度分析与弯曲强度分析,以防止轴在运行过程中发生塑性变形...

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧