jsp 同一个浏览器多用户登陆检查 不用检查,一个浏览器只能有一个sessionId来记录用户登录。想判断也很简单,在jsp中用java脚本,这么写:session.getAttribute(key),看看这个结果是不是空,不是空,就说明已登录 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 限制一个浏览器就用session,限制一台机器就用IP+MAC地址 key值用什么?session的id么?我试了下,同一个浏览器两个选项卡登陆,session的id不同啊,判断不了。 在数据库中增加一个用户状态,如果用户登录了,那么就将此状态设为1,如果退出登录,就将此状态设为0。用户登录时,先检查此状态是否为0。如果不是0,就不允许登录。为防止用户不正常退出(直接关闭浏览器等操作),可以设定session超时时间,并监听session失效事件。当session失效时,将状态设为0。 请问怎么解决?感觉一楼的思路是可行的,但是不知道怎么去判断,key值是什么 key值用什么?session的id么?我试了下,同一个浏览器两个选项卡登陆,session的id不同啊,判断不了。没办法做到同一个浏览器同时有两个用户登录,除非你用了两个session才可以不过没这么干的,再说,同一个浏览器同时有两个用户登录需求中也没有这么干的 session保存数据的方法是以键值对的形式存储的,session.put("key","value"),key值就是这个啊! session 可以 解决这个 问题、、、登陆前 判断一下应该就可以了 session保存数据的方法是以键值对的形式存储的,session.put("key","value"),key值就是这个啊!我知道是键值对的,但是怎么判断呢?我就是不晓得怎么判断。比如我写了个下面的测试代码,结果同一个浏览器中两个选项卡,登陆了两个用户,str都是null,所以判断不了啊 String str=(String) request.getSession().getAttribute("test"); if(str==null||str.equals("")) //同一个浏览器中第一个用户登陆 { request.getSession().setAttribute("test", "aaaaaaaaaaa"); } else //同一个浏览器中第二个用户登陆 { } 你登录的时候,是不是把用户对象存入到session中,程序中是这么写的:User user = userDao.getUser(name, pwd); //userDao是访问数据库,根据name和pwd从数据库中查出这个Usersession.setAttribute("user", user); //就是一个键值对存在这个session会话中,来表示user用户已经登录,这里就完成登录了即然你想查看是不是有用户登录,就这么写:User user = session.getAttribute("user");//这里从session取出这个当前登录用户if(user == null){没登录}esle {有用户登录}其实,你说的这个需求在项目开发中很常见,比如权限,用户登录了才能用行一系列的操作 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 这个应该无法实现吧,再说了,这么做也没什么意义啊,为了用户登录信息安全,这个功能是不会出现在实际开以项目中再说了,登录就一定会用session会话啊,一个session会话表示的是一个浏览器,不是多个 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 这个应该无法实现吧,再说了,这么做也没什么意义啊,为了用户登录信息安全,这个功能是不会出现在实际开以项目中再说了,登录就一定会用session会话啊,一个session会话表示的是一个浏览器,不是多个现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 这个应该无法实现吧,再说了,这么做也没什么意义啊,为了用户登录信息安全,这个功能是不会出现在实际开以项目中再说了,登录就一定会用session会话啊,一个session会话表示的是一个浏览器,不是多个现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么? 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 这个应该无法实现吧,再说了,这么做也没什么意义啊,为了用户登录信息安全,这个功能是不会出现在实际开以项目中再说了,登录就一定会用session会话啊,一个session会话表示的是一个浏览器,不是多个现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?即使已经有用户登录了,新开选项卡登陆第二个用户,user依然是null,判断不了 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 这个应该无法实现吧,再说了,这么做也没什么意义啊,为了用户登录信息安全,这个功能是不会出现在实际开以项目中再说了,登录就一定会用session会话啊,一个session会话表示的是一个浏览器,不是多个现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?即使已经有用户登录了,新开选项卡登陆第二个用户,user依然是null,判断不了怎么可能,只要是在操作系统中的浏览器的开着,学永远不会出现这种情况你用的什么浏览器啊 你写的这个方法,跟我上面提供的代码其实是一样的效果。可能我没有说清楚,我说的是同一个浏览器不同选项卡登陆不同用户。比如用户A已经登陆,我新开一个选项卡,用户B账号再登陆。如果已经有A登陆成功了,我要防止B用户在这个浏览器中登陆。就是一个浏览器只能登陆一个用户(其他不同的用户名用户登陆时要检测到)。用你的方法,只能判断同一个用户的多次登录吧 这个应该无法实现吧,再说了,这么做也没什么意义啊,为了用户登录信息安全,这个功能是不会出现在实际开以项目中再说了,登录就一定会用session会话啊,一个session会话表示的是一个浏览器,不是多个现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?即使已经有用户登录了,新开选项卡登陆第二个用户,user依然是null,判断不了怎么可能,只要是在操作系统中的浏览器的开着,学永远不会出现这种情况你用的什么浏览器啊你这里的session是指什么session?是controller中的request.getSession()吗?我用这样的方式获取session确实没法实现你说的那种效果 用的IE8。在controller中的request.getSession()获取session 打开浏览器,在选项卡A中输入登录页面(*/login.html)登录用户a,然后再打开一个选项卡B输入登录页面(*/login.html)尝试登录用户b,提交后你想提示:已经有用户登录等信息。是这个意思么?如果是这样的,可以有两种方法解决:方案一登录时判断session中是否已经有用户信息并且与当前用户名一致。即User user = userDao.getUser(username, password);//userDao是访问数据库,根据name和pwd从数据库中查出这个Usersession.setAttribute("user", user);//保存登录用户信息if(session.getAttribute("user")!=null){ System.out.println("已经有用户登录。"); return;}User user = userDao.getUser(username, password);//userDao是访问数据库,根据name和pwd从数据库中查出这个Usersession.setAttribute("user", user);//保存登录用户信息方案二更趋于人性化的设计时如果已经有用户登录则不应该再显示登录框。即当请求登录表单页面时,判断是否有用户登录(即session.getAttribute("user")!=null)。 只能session了,但session有性能影响。看你用户并发量如何了,再作设计! 对,就是你这个意思,完全相同的理解。可是我用这样的方式,在开第二个选项卡判断登陆的时候,user依然是空?这是问题的关键。我是在controller中的request.getSession()获取session对象做你贴的代码那样处理。请问是不是session取法不对?还是其他什么原因 对,就是你这个意思,完全相同的理解。可是我用这样的方式,在开第二个选项卡判断登陆的时候,user依然是空?这是问题的关键。我是在controller中的request.getSession()获取session对象做你贴的代码那样处理。请问是不是session取法不对?还是其他什么原因两个session不是一个。我们项目有一种做法,用静态类保留一个sesion队列,登录的时候去查询session是否有当前登录的用户的session然后做操作。 从session中取user并判断是否为null的操作应该最前面的。登录成功时要保存user到session的。这样你在同一个浏览器中第一次登录时正常访问,再用另一选项卡登录时就可以检测出来并可以禁止二次登录了。 从session中取user并判断是否为null的操作应该最前面的。登录成功时要保存user到session的。这样你在同一个浏览器中第一次登录时正常访问,再用另一选项卡登录时就可以检测出来并可以禁止二次登录了。 关键是session不同,第二次登陆的时候,取出来的user是null,即使第一次登陆的时候存了user信息。 对,就是你这个意思,完全相同的理解。可是我用这样的方式,在开第二个选项卡判断登陆的时候,user依然是空?这是问题的关键。我是在controller中的request.getSession()获取session对象做你贴的代码那样处理。请问是不是session取法不对?还是其他什么原因两个session不是一个。我们项目有一种做法,用静态类保留一个sesion队列,登录的时候去查询session是否有当前登录的用户的session然后做操作。这种方法只能处理同一个用户登陆吧?如果两个选项卡登陆的是不同的用户怎么处理呢?也区分不了 ThreadLocal 就能解决了,不需要依赖session 你理解错了吧?两个选项卡使用的是同一个session,所以如果已经有用户登录,那么再次登录的时候后台还是从同一个session中取数据进行校验的。所以应该可以满足你的要求。除非,你开启了浏览器的特殊设置——比如,360浏览器经过设置可以同时登录多个游戏账号。 你理解错了吧?两个选项卡使用的是同一个session,所以如果已经有用户登录,那么再次登录的时候后台还是从同一个session中取数据进行校验的。所以应该可以满足你的要求。除非,你开启了浏览器的特殊设置——比如,360浏览器经过设置可以同时登录多个游戏账号。解决了哈,就是用session判断。之前是由于做了特殊设置导致的。谢谢大家 SSO,单点登陆问题。有PHP做的系统及JSP做的系统。可做单点登陆吗? 关于连接SQLServer的问题! 用户权限跳转问题。急。先给100散分。问题解决者再给500连开5帖。 关于在java中调用js的问题 ?????????? 何时该使用jsp的错误处理页面 apache-tomcat模式下连接池的问题? 连接oracle数据库问题! 我怎样把90多M的weblogic7从网吧用32M的优盘带走??? JSP问题,求助求助,急急急急! 从设计的角度说两个类互相引用是否应该避免? servlet要接收JSP页面文本框内的内容
用户登录时,先检查此状态是否为0。如果不是0,就不允许登录。
为防止用户不正常退出(直接关闭浏览器等操作),可以设定session超时时间,并监听session失效事件。当session失效时,将状态设为0。
session保存数据的方法是以键值对的形式存储的,session.put("key","value"),key值就是这个啊!
session保存数据的方法是以键值对的形式存储的,session.put("key","value"),key值就是这个啊!
我知道是键值对的,但是怎么判断呢?我就是不晓得怎么判断。比如我写了个下面的测试代码,结果同一个浏览器中两个选项卡,登陆了两个用户,str都是null,所以判断不了啊 String str=(String) request.getSession().getAttribute("test");
if(str==null||str.equals("")) //同一个浏览器中第一个用户登陆
{
request.getSession().setAttribute("test", "aaaaaaaaaaa");
}
else //同一个浏览器中第二个用户登陆
{
}
User user = userDao.getUser(name, pwd); //userDao是访问数据库,根据name和pwd从数据库中查出这个User
session.setAttribute("user", user); //就是一个键值对存在这个session会话中,来表示user用户已经登录,这里就完成登录了即然你想查看是不是有用户登录,就这么写:
User user = session.getAttribute("user");//这里从session取出这个当前登录用户
if(user == null){
没登录
}esle {
有用户登录
}其实,你说的这个需求在项目开发中很常见,比如权限,用户登录了才能用行一系列的操作
现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。
现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?
现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?即使已经有用户登录了,新开选项卡登陆第二个用户,user依然是null,判断不了
现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?即使已经有用户登录了,新开选项卡登陆第二个用户,user依然是null,判断不了怎么可能,只要是在操作系统中的浏览器的开着,学永远不会出现这种情况你用的什么浏览器啊
现在就是有意义,功能很简单,就是让一个浏览器只能登陆一个用户。若浏览器已经登陆了一个用户,再登陆其他用户就提示该浏览器已经登陆了另外一个用户,请注销后再登陆。 肯定可以实现的,我看到别人的网站都可以实现此功能。对啊,就按上面我说的,如果有user不为空,就直接return,不进行登录了,当然可以返回一些提示比如:其它用户已经登录。user为空,就session.setAttribute(),来登录,这不就成了么?即使已经有用户登录了,新开选项卡登陆第二个用户,user依然是null,判断不了怎么可能,只要是在操作系统中的浏览器的开着,学永远不会出现这种情况你用的什么浏览器啊你这里的session是指什么session?是controller中的request.getSession()吗?我用这样的方式获取session确实没法实现你说的那种效果
方案一
登录时判断session中是否已经有用户信息并且与当前用户名一致。即
User user = userDao.getUser(username, password);
//userDao是访问数据库,根据name和pwd从数据库中查出这个User
session.setAttribute("user", user);
//保存登录用户信息
if(session.getAttribute("user")!=null)
{
System.out.println("已经有用户登录。");
return;
}
User user = userDao.getUser(username, password);
//userDao是访问数据库,根据name和pwd从数据库中查出这个User
session.setAttribute("user", user);
//保存登录用户信息
方案二
更趋于人性化的设计时如果已经有用户登录则不应该再显示登录框。
即当请求登录表单页面时,判断是否有用户登录(即session.getAttribute("user")!=null)。
我们项目有一种做法,用静态类保留一个sesion队列,登录的时候去查询session是否有当前登录的用户的session然后做操作。
从session中取user并判断是否为null的操作应该最前面的。登录成功时要保存user到session的。这样你在同一个浏览器中第一次登录时正常访问,再用另一选项卡登录时就可以检测出来并可以禁止二次登录了。
从session中取user并判断是否为null的操作应该最前面的。登录成功时要保存user到session的。这样你在同一个浏览器中第一次登录时正常访问,再用另一选项卡登录时就可以检测出来并可以禁止二次登录了。
关键是session不同,第二次登陆的时候,取出来的user是null,即使第一次登陆的时候存了user信息。
我们项目有一种做法,用静态类保留一个sesion队列,登录的时候去查询session是否有当前登录的用户的session然后做操作。这种方法只能处理同一个用户登陆吧?如果两个选项卡登陆的是不同的用户怎么处理呢?也区分不了
你理解错了吧?两个选项卡使用的是同一个session,所以如果已经有用户登录,那么再次登录的时候后台还是从同一个session中取数据进行校验的。所以应该可以满足你的要求。除非,你开启了浏览器的特殊设置——比如,360浏览器经过设置可以同时登录多个游戏账号。
你理解错了吧?两个选项卡使用的是同一个session,所以如果已经有用户登录,那么再次登录的时候后台还是从同一个session中取数据进行校验的。所以应该可以满足你的要求。除非,你开启了浏览器的特殊设置——比如,360浏览器经过设置可以同时登录多个游戏账号。
解决了哈,就是用session判断。之前是由于做了特殊设置导致的。谢谢大家