web开发中解决一个浏览器登录多个用户的方案
2014-06-04 14:11
302 查看
以前项目中遇到过这样的情况,当时是这样解决的,这里记下来。
1,用户的保存
-----------------------------------------------------------------
用户统一存在存在session的一个map中,
map的key是用户的id,value是用户对象。
sesion.map.put("activeUserMap",map);
2,登录时的操作:
-----------------------------------------------------------------
当用户登录时,把这个用户加入到(1)的map中,这就相当于一个入口。没有登录的用户在session的map中也就
没有记录。
Map map = sesion.map.get("activeUserMap");
map.put("userId",user);
session中保存一个当前活跃的用户id(当前登录用户的id)
sesion.map.put("activeUserId",userId)
然后跳转到一个页面。
3,页面加一个js脚本
-----------------------------------------------------------------
页面获取session中的活跃用户id隐藏到某个控件中,
例如:
<intput type="hedden" name="activeUserId" value="${activeUserId}">
然后,页面加一个js的脚本,取得(2)中携带的活跃用户id,
获取页面所有的a标签,并把a标签的href中加上这个用户id,form的action也可以加上。
或者也可以在jsp手动吧每个标签后面加上这个活跃用户id
4,拦截器,判断用户是否登录
-----------------------------------------------------------------
拦截器中拦截需要用户登录的资源,获取当前带过来的活跃用户id,去(1)的session的map中查找这个用户id,
返回用户对象,如为空则代表用户没有登录,如果有值,把这个id覆盖session中的活跃用户id。
----------伪代码----------
int uid;//当前url带过来的用户id
Map map = sesion.map.get("activeUserMap");
Object obj = map.get(uid);
if(obj == null){
//用户未登录或者,用户自己输入的url,跳到错误页面。
}else{
//用户已登录,把当前带过来的用户id存到session中,覆盖活跃用户id
sesion.map.put("activeUserId",uid);
//转到action中进行处理,这里也可以将用户注入到action中,供后面action使用而不用再去。
}
把这个用户对象注入到action中,action中声明一个user属性及get...set方法,然后就转到action了,action中直接取user属性
当作当前登录用户来操作。(这里也可以让所有action实现一个接口,接口中有setUser方法就行,在拦截器中统一注入)。或者
可以不做这个操作,直接放行到action
---------------------------------------------结束分割线--------------------------------------------
就这么多了,不知道这个实不实用,以前就是这样做的。。。
1,用户的保存
-----------------------------------------------------------------
用户统一存在存在session的一个map中,
map的key是用户的id,value是用户对象。
sesion.map.put("activeUserMap",map);
2,登录时的操作:
-----------------------------------------------------------------
当用户登录时,把这个用户加入到(1)的map中,这就相当于一个入口。没有登录的用户在session的map中也就
没有记录。
Map map = sesion.map.get("activeUserMap");
map.put("userId",user);
session中保存一个当前活跃的用户id(当前登录用户的id)
sesion.map.put("activeUserId",userId)
然后跳转到一个页面。
3,页面加一个js脚本
-----------------------------------------------------------------
页面获取session中的活跃用户id隐藏到某个控件中,
例如:
<intput type="hedden" name="activeUserId" value="${activeUserId}">
然后,页面加一个js的脚本,取得(2)中携带的活跃用户id,
获取页面所有的a标签,并把a标签的href中加上这个用户id,form的action也可以加上。
或者也可以在jsp手动吧每个标签后面加上这个活跃用户id
4,拦截器,判断用户是否登录
-----------------------------------------------------------------
拦截器中拦截需要用户登录的资源,获取当前带过来的活跃用户id,去(1)的session的map中查找这个用户id,
返回用户对象,如为空则代表用户没有登录,如果有值,把这个id覆盖session中的活跃用户id。
----------伪代码----------
int uid;//当前url带过来的用户id
Map map = sesion.map.get("activeUserMap");
Object obj = map.get(uid);
if(obj == null){
//用户未登录或者,用户自己输入的url,跳到错误页面。
}else{
//用户已登录,把当前带过来的用户id存到session中,覆盖活跃用户id
sesion.map.put("activeUserId",uid);
//转到action中进行处理,这里也可以将用户注入到action中,供后面action使用而不用再去。
}
把这个用户对象注入到action中,action中声明一个user属性及get...set方法,然后就转到action了,action中直接取user属性
当作当前登录用户来操作。(这里也可以让所有action实现一个接口,接口中有setUser方法就行,在拦截器中统一注入)。或者
可以不做这个操作,直接放行到action
---------------------------------------------结束分割线--------------------------------------------
就这么多了,不知道这个实不实用,以前就是这样做的。。。
相关文章推荐
- iOS开发一个用户登录注册模块需要解决的坑
- Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
- VB.Net + asp.net的一个web系统,使用SQL2000数据库 现在运行时偶尔会出现一个奇怪现象,一个用户登录时,登录后的界面竟然是另一个用户
- 提供一个跨浏览器的XML DOM对象解决方案,来自于《javascript高级程序设计》
- 用户登录模拟浏览器访问数据库的新形式--HttpWebRequest 访问数据库
- 合作开发收费系统——临时表解决用户重复登录问题
- 解决:在点击用户退出登录时,再按浏览器的后退按钮,仍然能够看到之前的页面
- 关于解决ASP环境下防止同一用户重复登录的问题的几种方案(20060110原创)
- 解决同一用户同时登录的方案
- 解决员工更换工号后通过SPContext.Current.Web.CurrentUser.LoginName查找当前登录用户还是原来工号的问题
- Weapsy 分析三(Web层) 3 关于MVC3中一个表单多个按钮的处理方案
- eeplat平台开发中限制多个用户同时登录同一个账号的问题解决方案
- java web开发一个帐号同一时间只能一个人登录
- Java Web开发: 基于HttpServlet的用户登录网站 实例
- 一个并不是很好解决web打印方案的例子
- ASP.NET防止同一个帐号多个用户同时登陆的解决方法
- .net同一个解决方案下面多个web项目的解决方法
- 使用structs2.0开发一个简单的用户登录程序
- JavaWeb开发防止用户重复登录
- Web开发要考虑用户禁用浏览器的JS吗?