请教怎样判断用户不能重复登陆???? 判断用户是否已登陆?还有就是如果有很多个用户,是不是要一个一个判断???还是有更好的办法?最好有代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用户登录后把用户信息放到session里,每次登录的时候判断session是否有,如果有,就说明用户重新登录超时也是一样,超时了,session就清了,用户就不存在了伪代码:User user = (User)request.getSession().getArribute("user",user); //从session中取用户request.getSession().setArribute("user",user); //把用户放到session中 zb_86 的方法不可用,因为SESSION是浏览器管理的,放置了SESSION只能是在当前打开的浏览器存在,如果另一个用户使用另一台计算机登陆,这时候捕获的SESSION为null,所以还是认为没有登陆.我建议可以使用下面两种方法:1,给数据库USERINFO表中加一个用户登陆状态的标记,登陆时判断一下该用户是否登陆2,可以将用户登陆信息放在application中来判断是否已经登陆 嗯,用表来即时判断比较好,用户少的可以用session另外,需要判断用户退出时的错误处理!!! 代码自己google找,思路如下:在用户表加2个字段 一个存用户的状态 一个存登录的ip 这样二次登录不上的时候可以给用户一个准确提示在那个ip上登录当用户点退出 按钮 或者session 超时,都好弄,只要在调用sessionDestroyed() 监听的方法 ,对数据库进行更新就可以了,关键难得是你怎么监听到用户点浏览器的关闭按钮,用户点浏览器的关闭按钮它是不会很快自动调用sessionDestroyed()方法的。 提示:监听到用户点浏览器的关闭按钮 用js方法 。具体代码记不得了,googler搜索下在js方法里再调用 action 或者serverlet 。 用户 登录时就不说,很简单 我做的方法是数据库中加一个在线表 记录用户sessionID 用户名 最后活动时间当用户与我的服务器有交互时更新最后活动时间登录时遍历这张表就能知道是否是重复登录 我是说别人在这台机器上登陆了,用user1另外一个人在另一台机器上也用user1登陆就提示!!用户已登陆也许liushoucang 的方法,可以试试... 哦,原来是这个需求啊,是我理解错了。用表是个方法,但有一些缺陷:1,性能下降2,万一系统down了,数据库表没有及时更新,就意味着已登录的用户永远无法再登录了我的建议是:1,如果用户帐号是唯一的,完全可以在用户登录后,把用户的信息放在Application中,这样就完全保证了只能有一个用户登录2,如果用户帐号不是唯一的,用表的话,最好加上触发器 ArrayList list = null; //调用登陆方法 list = infoDao.infoSelect(name, pwd, actor); if (list != null) { //用for循环取list的值 for (int i = 0; i < list.size(); i++) { //StuInfoBean来接收 StuInfoBean bean = (StuInfoBean) list.get(i); //把姓名和角色放到session里去 se.setAttribute("name", bean.getStuName()); se.setAttribute("actor", bean.getActor()); se.setAttribute("actor",actor); //判断list不等于null if (actor.equals("学生")) { //判断actor是学生 //用学生的状态来判断学生是否第一次进来 if (!bean.getComputer().equals("1")) { //只要学生进来过就不给生进去! out.print( "<script>alert('你已经登录过一次想登录在请联系老师');window.location='login.jsp'</script>"); //给他跳到页面 // request.getRequestDispatcher("/login.jsp").forward(request, response); //response.sendRedirect("/WebRoot/login.jsp"); // request.getRequestDispatcher("login.jsp").forward(request, response); } else { //用学生的状态学生第一次进来 //调用更新状态 //获取计算机的IP地址 String Conputer = request.getRemoteHost(); //进行自动更新学生的状态 if (infoDao.infoUpdata(bean.getId(), Conputer)) { request.getSession().setAttribute("id", bean.getId() + ""); String ClassName = infoDao.getStuClass( name); getServletContext().setAttribute( "className", ClassName);// request.getRequestDispatcher(// "/student/stuAns.jsp").forward(// request, response); response.sendRedirect( "/WebRoot/student/stuAns.jsp"); } 我曾经回答过这个问题,你参考一下吧,里面的代码是现成的,用application解决的http://topic.csdn.net/u/20071218/17/ba4861a2-94a7-46b2-9d85-b2d17008820e.html 在不同的机器上可行吗?断电的情况是否可行?我研究一下明天,整明白了就结贴kke_007和olivesoup 这两位的也许可行kke_007能说下哪个是在类里,哪个是在JSP里的代码吗? 先问一下,在数据库中没有一个属性判断表示用户是否在线吗?就是没有那只能用 HttpServletSession 了,前面有几位答的很好 >在不同的机器上可行吗?当然可行,当时重点就是解决这个问题>断电的情况是否可行?遗憾,当时没有测试断电情况,你可以试一下,有什么问题留言,我还会关注 kke_007 这位的似乎不太合适olivesoup 冬瓜的应该可行,不过图片看不到了..不是STRUTS的,正在试,呵 是不是struts的无所谓啊,只要你用servlet就行欢迎测试,共同改进!我也奇怪为什么图片看不到,我当时在公司发的,回家就看不到,现在也只能在公司的机器上看到,难道我传的图片只有我一个人能看到??感觉csdn并没有获取我的图片,只是拿了我的链接真不知道这个论坛是怎么做的,bug一堆堆的 在数据库里多加一个字段记录登录时间,在每次登录的时候都会把登录时间update到数据库,同时也把它存在session里。然后再弄个过滤器,这个过滤器用来对比session里的时间跟数据库里的时间是否一致,如果不一致,就销毁session。这样,应该可以保证得了只有最后登录的用户才有权限吧? 简单办法是 让后登陆的冲掉前面登陆的建立一个 HashMap (登陆者名称,登陆者session)当新的成功登陆就 检查 这个登陆名否有SESSION在了 存在就 清空这个SESSION(这样第一次登陆者SESSION就空了)然后放置新的SESSION进去session 结束事件中 添加 HASHMAP中的删除事件(要判断是否还是登陆状态) 最近学习的老师让我们做一个小的网站 遇到这样的问题了 之前用session做 觉得不够严谨 spring 的applicationContext.xml bean配置报错问题 验证码与session的困扰 算法问题 我想知道一般的公司做网页都是用哪种技术做的,是asp,php,还是jsp啊? 求助 关于中文 顾祎晛 显示的问题 cookie的问题 再次求助!! 急急急!各位高手,如何将动态生成的jsp页面中内容导入到EXCEL文档中? 如何把一个中文的字符串写入一个文件中 java下字符集的问题 怎样在Eclipse下安装PDE(插件开发环境)? severlet如何获得jsp页面中form传递的参数
超时也是一样,超时了,session就清了,用户就不存在了伪代码:User user = (User)request.getSession().getArribute("user",user); //从session中取用户request.getSession().setArribute("user",user); //把用户放到session中
我建议可以使用下面两种方法:
1,给数据库USERINFO表中加一个用户登陆状态的标记,登陆时判断一下该用户是否登陆
2,可以将用户登陆信息放在application中来判断是否已经登陆
另外,需要判断用户退出时的错误处理!!!
在用户表加2个字段 一个存用户的状态 一个存登录的ip 这样二次登录不上的时候可以给用户一个准确提示在那个ip上登录
当用户点退出 按钮 或者session 超时,都好弄,只要在调用sessionDestroyed() 监听的方法 ,对数据库进行更新就可以了,关键难得是你怎么监听到用户点浏览器的关闭按钮,用户点浏览器的关闭按钮它是不会很快自动调用
sessionDestroyed()方法的。 提示:监听到用户点浏览器的关闭按钮 用js方法 。具体代码记不得了,googler搜索下
在js方法里再调用 action 或者serverlet 。
用户 登录时就不说,很简单
当用户与我的服务器有交互时更新最后活动时间登录时遍历这张表就能知道是否是重复登录
另外一个人在另一台机器上也用user1登陆就提示!!用户已登陆
也许liushoucang 的方法,可以试试...
用表是个方法,但有一些缺陷:
1,性能下降
2,万一系统down了,数据库表没有及时更新,就意味着已登录的用户永远无法再登录了我的建议是:
1,如果用户帐号是唯一的,完全可以在用户登录后,把用户的信息放在Application中,这样就完全保证了只能有一个用户登录
2,如果用户帐号不是唯一的,用表的话,最好加上触发器
//调用登陆方法
list = infoDao.infoSelect(name, pwd, actor);
if (list != null) {
//用for循环取list的值
for (int i = 0; i < list.size(); i++) {
//StuInfoBean来接收
StuInfoBean bean = (StuInfoBean) list.get(i);
//把姓名和角色放到session里去
se.setAttribute("name", bean.getStuName());
se.setAttribute("actor", bean.getActor());
se.setAttribute("actor",actor);
//判断list不等于null
if (actor.equals("学生")) {
//判断actor是学生
//用学生的状态来判断学生是否第一次进来 if (!bean.getComputer().equals("1")) {
//只要学生进来过就不给生进去!
out.print(
"<script>alert('你已经登录过一次想登录在请联系老师');window.location='login.jsp'</script>");
//给他跳到页面
// request.getRequestDispatcher("/login.jsp").forward(request, response);
//response.sendRedirect("/WebRoot/login.jsp"); // request.getRequestDispatcher("login.jsp").forward(request, response);
} else {
//用学生的状态学生第一次进来
//调用更新状态 //获取计算机的IP地址
String Conputer = request.getRemoteHost(); //进行自动更新学生的状态
if (infoDao.infoUpdata(bean.getId(), Conputer)) {
request.getSession().setAttribute("id",
bean.getId() + ""); String ClassName = infoDao.getStuClass(
name);
getServletContext().setAttribute(
"className", ClassName);// request.getRequestDispatcher(
// "/student/stuAns.jsp").forward(
// request, response);
response.sendRedirect(
"/WebRoot/student/stuAns.jsp");
}
http://topic.csdn.net/u/20071218/17/ba4861a2-94a7-46b2-9d85-b2d17008820e.html
我研究一下明天,整明白了就结贴
kke_007和olivesoup 这两位的也许可行
kke_007能说下哪个是在类里,哪个是在JSP里的代码吗?
就是没有那只能用 HttpServletSession 了,前面有几位答的很好
当然可行,当时重点就是解决这个问题>断电的情况是否可行?
遗憾,当时没有测试断电情况,你可以试一下,有什么问题留言,我还会关注
olivesoup 冬瓜的应该可行,不过图片看不到了..
不是STRUTS的,正在试,呵
难道我传的图片只有我一个人能看到??感觉csdn并没有获取我的图片,只是拿了我的链接
真不知道这个论坛是怎么做的,bug一堆堆的
建立一个 HashMap (登陆者名称,登陆者session)
当新的成功登陆就 检查 这个登陆名否有SESSION在了 存在就 清空这个SESSION(这样第一次登陆者SESSION就空了)
然后放置新的SESSION进去session 结束事件中 添加 HASHMAP中的删除事件(要判断是否还是登陆状态)