微信

使用微信服务,更方便

职友集>Java面试题 > 如何防止同一个帐户被多人同时登录

如何防止同一个帐户被多人同时登录

2015-08-13 06:30:01 阅读( 91 )

2123人 收藏本页

标签:Java面试题

1.用session超时,session为null就表示下线了
2.也可以采用数据库中设置     临时表     来处理
一个用户登陆时向表中插进一条记录,用户离开时候删除该记录
如想统计在线人数,简单地执行
select     count(*)     from     table…     即可
3.application对象中可以记住现在的人数,application的生命周期和服务器的生命周期一样长。
4.还有一种方法要用到一个文件global.jsa     ,方法是(在JSP中)是sessionDestroy(),其中它是以session对象为参数的。还有要把global.jsa文件必须房子和JSP程序相同的文件目录内才行。

5.网页自动刷新的代码是:
在文件头部加上

刷新间隔时间是15秒

6.在session中加入监听类,类的示例代码如下:

onLineUser.java
import     javax.servlet.http.*;
import     javax.servlet.*;
import     java.util.*;

public     class     onLineUser     implements     HttpSessionBindingListener     {
public     onLineUser(){
}
private     Vector     users=new     Vector();
public     int     getCount(){
users.trimToSize();
return     users.capacity();
}
public     boolean     existUser(String     userName){
users.trimToSize();
boolean     existUser=false;
for     (int     i=0;i<users.capacity();i++     )
{
if     (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return     existUser;
}

public     boolean     deleteUser(String     userName)     {
users.trimToSize();
if(existUser(userName)){
int     currUserIndex=-1;
for(int     i=0;i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if     (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return     true;
}
}
return     false;
}

public     Vector     getOnLineUser()
{
return     users;
}
public     void     valueBound(HttpSessionBindingEvent     e)     {
users.trimToSize();
if(!existUser(e.getName())){
users.add(e.getName());
System.out.print(e.getName()+”\t             登入到系统\t”+(new     Date()));
System.out.println(“                         在线用户数为:”+getCount());
}else
System.out.println(e.getName()+”已经存在”);
}

public     void     valueUnbound(HttpSessionBindingEvent     e)     {
users.trimToSize();
String     userName=e.getName();
deleteUser(userName);
System.out.print(userName+”\t             退出系统\t”+(new     Date()));
System.out.println(“                         在线用户数为:”+getCount());
}
}

jsp:








登陆成功,欢迎访问




<%
String     username=request.getParameter(“username”);
if     (onlineuser.existUser(username)){
out.println(“用户”+username+”已经登陆!”);
}else{
session.setMaxInactiveInterval(50);     //Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
out.println(“欢迎新用户:”+username+”登陆到系统!”);
}
out.println(“当前在线用户人数:”+onlineuser.getCount()+””);
String     ip     =     request.getRemoteAddr();
out.println(“IP:”+ip+””);
Vector     vt=onlineuser.getOnLineUser();
Enumeration     e     =     vt.elements();
out.println(“在线用户列表”);
out.println(“”);
out.println(“用户名”);
while(e.hasMoreElements()){
out.println(“”);
out.println((String)e.nextElement()+””);
out.println(“”);
}
out.println(“”);

%>

    


[关闭窗口]
<%
out.println(“退出系统

”);
%>


function     postMessage(){

}




来自IT公司面试手册

下一篇:介绍一下Lucene的索引机制

上一篇:swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题