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


Posted in 面试题 onAugust 01, 2013
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 {
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 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(“
用户名
”);
out.println((String)e.nextElement()+”
”);
out.println(“
”);

%>


[关闭窗口]
out.println(“

退出系统

”);
%>




Tags in this post...

面试题 相关文章推荐
PHP中如何创建和修改数组
May 02 面试题
10条PHP编程习惯
May 26 面试题
面向对象编程OOP的优点
Jan 22 面试题
Java和Javasciprt的区别
Sep 02 面试题
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
Sep 16 面试题
分布式数据库需要考虑哪些问题
Dec 08 面试题
网络方面基础面试题
Nov 16 面试题
init进程的作用
Apr 12 面试题
init进程的作用
Aug 20 面试题
Prototype如何更新局部页面
Mar 03 面试题
Python面试题:Python是如何进行内存管理的
Aug 04 面试题
高级Java程序员面试要点
Aug 02 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
Mar 30 #面试题
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Jan 27 #面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
Aug 18 #面试题
GC是什么?为什么要有GC?
Dec 08 #面试题
Overload和Override的区别
Sep 02 #面试题
什么时候用assert
May 08 #面试题
垃圾回收的优点和原理
May 16 #面试题
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
Python弹出输入框并获取输入值的实例
2019/06/18 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
2014年端午节活动方案
2014/03/11 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
基于Python实现将列表数据生成折线图
2022/03/23 Python
Python如何用re模块实现简易tokenizer
2022/05/02 Python