解决方案 »
- 在线等高手 解决webservice 客户端访问异常问题
- javascript IE上没有问题 FF上怎么不好用呢
- action/jsp读取cookie的问题
- 用java如何把图片处理到指定大小
- 求一个添加人员时,人员状态的处理类(临时,适用,正式)
- [Microsoft][ODBC 驱动程序 管理器] 非法的游标状态????
- 关于javamail发送超大附件的问题!!!在线等~~~~~~~~~
- startup!!出现doc窗口,可马上又消失了(非要重新启动才行)
- 请问在servlet中调用javabean?
- response重定向跳转和response响应数据冲突
- 关于ssh的增删改查问题
- 关于加密和解密的问题
但是你怎么知道这个用户的session对象呢?项目是这样做的,每次用户登录成功之后,都取session对象,把用户信息保存其中,如下:
Map<String, Object> session = ActionContext.getContext().getSession();
session.put(“username”, username);
但是你怎么知道这个用户的session对象呢?项目是这样做的,每次用户登录成功之后,都取session对象,把用户信息保存其中,如下:
Map<String, Object> session = ActionContext.getContext().getSession();
session.put(“username”, username);
是啊,删除这个username的map值就可以了。或者你强制用户退出下
但是你怎么知道这个用户的session对象呢?项目是这样做的,每次用户登录成功之后,都取session对象,把用户信息保存其中,如下:
Map<String, Object> session = ActionContext.getContext().getSession();
session.put(“username”, username);
是啊,删除这个username的map值就可以了。或者你强制用户退出下
我在描述下场景。有后台管理和前台用户两套系统。每次用户登录都会存session,session.put(“username”, username);
现在的问题 1)后台管理员可以获取前台的这个session么?
2)即便可以获得,那么简单的remove,是针对哪个用户?还是全部的用户session都没有了?
如果多个用户登录,你怎么确定哪个用户对应的map值啊
如果按楼上说的好像是用户A放到session中的东西,用户B也能取到?
如果这样需要对每次请求的session做验证,可以在filter中,验证当前session中的user是否被删除,被删除的就session.invalidate(),然后重定向到登录页面让他去登录,重新登录的时候就会发现被删除了
每次都在filter中做判断,会不会使网站的访问速度降低,因为按你所说,每一个请求都要判断相应的session,都要做一次数据库的查询、、、这样会不会影响到速度???
每次都在filter中做判断,会不会使网站的访问速度降低,因为按你所说,每一个请求都要判断相应的session,都要做一次数据库的查询、、、这样会不会影响到速度???
session存到全局变量中了,每次删除的时候检查这个全局变量就行了。如果有该用户的session就销毁就行,
你filter 还是正常拦截检查每个操作是否有session,不用查数据库,
什么叫服务器的全局变量?
你定义一个类,类里边定义一个静态的变量,其他所有的类都能访问,这就是服务器全局变量。
跟平常Map<String, Object> session = ActionContext.getContext().getSession();这样有区别么?
明白了,相当于把所有登录的session都放在一个全局变量里,相当于他在服务运行的时候,其登录信息全部保存在服务器的内存中。如果用户登录量大的话,应该对内存没有太大影响吧。
跟不设置这个全局变量,只是每个用户的key值唯一,然后每次使用的时候直接取。
Map<String, Object> session = ActionContext.getContext().getSession();
session.get("usernameA");
有什么区别呀???
明白了,相当于把所有登录的session都放在一个全局变量里,相当于他在服务运行的时候,其登录信息全部保存在服务器的内存中。如果用户登录量大的话,应该对内存没有太大影响吧。
我觉得这个session一直在内存中,知道超时和销毁时才不在内存中, 用全局的变量保存也只是指向了这个对象,便于取到每个用户的session。不会影响服务器的。session超时和销毁时,会指向null,你还的自己试试。我没做过web的这种操作,只做过socket的。
明白了,相当于把所有登录的session都放在一个全局变量里,相当于他在服务运行的时候,其登录信息全部保存在服务器的内存中。如果用户登录量大的话,应该对内存没有太大影响吧。
我觉得这个session一直在内存中,知道超时和销毁时才不在内存中, 用全局的变量保存也只是指向了这个对象,便于取到每个用户的session。不会影响服务器的。session超时和销毁时,会指向null,你还的自己试试。我没做过web的这种操作,只做过socket的。非常感谢
跟不设置这个全局变量,只是每个用户的key值唯一,然后每次使用的时候直接取。
Map<String, Object> session = ActionContext.getContext().getSession();
session.get("usernameA");
有什么区别呀???
session本身是和map很类似,当一个用户登录时候调用
Map<String, Object> session = ActionContext.getContext().getSession();这个时候取到的是你当前的用户对应的会话对象,而你是娶不到别的用户的会话对象的。 而我们现在要做的事取到别的用户的会话对象并销毁,所以要把每个用户对应的会话以用户的名字为KEY,session为值存到全局变量里。
如果这个用户做了某种投机取巧的方法,保证一直处于操作状态,那岂不是一直都相当于删除不了吗?
完全没这个必要,你想想 你的用户我想是后台管理员客服吧?他要是投机取巧你直接冻结账号不可用不就好了?再说了 你还能检测到你的管理员客服有没有投机取巧恶意刷新恶意操作么?呵呵 这个不能吧?退一步讲你就算是能够检测得到 删除了他的session让他强制退出 那么他在刷新页面一直F5刷新登录 你是不是还得请个专门的客服来删除它的session呢?办法很简单 直接用权限大的管理员把他的账号冻结为不可用 登录都没法登录 或者直接删除账号就好了,更何况你的客服是你花钱请来的你觉得他会那么蠢敢这种吃力不讨好的事儿啊,账号是你公司超级管理员给的,别人也不知道啊,安全,管理员数量毕竟少数,公司在大也不会很多,你这个想法是多余的,如果是前台用户 游客这类型的类似于商城和微博啊这种用户的话 就跟没必要session删除了 你的portal可不就是让他们浏览和查看的么 前台用户是否恶意刷新和操作 你跟没法检测了 你说对么?
1.在你的登录方法中将每次登录的session放入Map<userId,session>之中
2.在你的拦截器preXX方法中拦截非登录的请求,首先用当前登录用户的ID去上述Map中取相关的session,如果存在则说明账户没有删除,可以继续访问,如果不存在相关session则说明账户已被删除,那么同时将当前登录用户的session销毁,同时将请求redirect道登录界面即可
每次都在filter中做判断,会不会使网站的访问速度降低,因为按你所说,每一个请求都要判断相应的session,都要做一次数据库的查询、、、这样会不会影响到速度???
使用缓存呗。 要删除的用户在数据库中物理/逻辑删除完之后,存入缓存中,filter验证时读缓存,invalid之后要记得remove缓存
但是你怎么知道这个用户的session对象呢?项目是这样做的,每次用户登录成功之后,都取session对象,把用户信息保存其中,如下:
Map<String, Object> session = ActionContext.getContext().getSession();
session.put(“username”, username);
从Map中获取对应用户的Session,然后执行Session.invalidate();让该用户Session失效就可以了.这样就清楚指定用户的登录信息.
J2EE是不分Session是属于哪个用户的, 记住HTTP是无状态协议, 每次是根据浏览器Cookie定位缓存中的用户信息(Session).
如果这个用户做了某种投机取巧的方法,保证一直处于操作状态,那岂不是一直都相当于删除不了吗?
完全没这个必要,你想想 你的用户我想是后台管理员客服吧?他要是投机取巧你直接冻结账号不可用不就好了?再说了 你还能检测到你的管理员客服有没有投机取巧恶意刷新恶意操作么?呵呵 这个不能吧?退一步讲你就算是能够检测得到 删除了他的session让他强制退出 那么他在刷新页面一直F5刷新登录 你是不是还得请个专门的客服来删除它的session呢?办法很简单 直接用权限大的管理员把他的账号冻结为不可用 登录都没法登录 或者直接删除账号就好了,更何况你的客服是你花钱请来的你觉得他会那么蠢敢这种吃力不讨好的事儿啊,账号是你公司超级管理员给的,别人也不知道啊,安全,管理员数量毕竟少数,公司在大也不会很多,你这个想法是多余的,如果是前台用户 游客这类型的类似于商城和微博啊这种用户的话 就跟没必要session删除了 你的portal可不就是让他们浏览和查看的么 前台用户是否恶意刷新和操作 你跟没法检测了 你说对么?
谢谢你码了这么多字,其实我都不怎么明白你说的东西。。
每次都在filter中做判断,会不会使网站的访问速度降低,因为按你所说,每一个请求都要判断相应的session,都要做一次数据库的查询、、、这样会不会影响到速度???
使用缓存呗。 要删除的用户在数据库中物理/逻辑删除完之后,存入缓存中,filter验证时读缓存,invalid之后要记得remove缓存
怎么使用缓存???真是第一次听说,望指教。
但是你怎么知道这个用户的session对象呢?项目是这样做的,每次用户登录成功之后,都取session对象,把用户信息保存其中,如下:
Map<String, Object> session = ActionContext.getContext().getSession();
session.put(“username”, username);
从Map中获取对应用户的Session,然后执行Session.invalidate();让该用户Session失效就可以了.这样就清楚指定用户的登录信息.
J2EE是不分Session是属于哪个用户的, 记住HTTP是无状态协议, 每次是根据浏览器Cookie定位缓存中的用户信息(Session).HTTP是无状态协议,然后呢?我真的体会不到你的想法。
但是你怎么知道这个用户的session对象呢?项目是这样做的,每次用户登录成功之后,都取session对象,把用户信息保存其中,如下:
Map<String, Object> session = ActionContext.getContext().getSession();
session.put(“username”, username);
从Map中获取对应用户的Session,然后执行Session.invalidate();让该用户Session失效就可以了.这样就清楚指定用户的登录信息.
J2EE是不分Session是属于哪个用户的, 记住HTTP是无状态协议, 每次是根据浏览器Cookie定位缓存中的用户信息(Session).HTTP是无状态协议,然后呢?我真的体会不到你的想法。
无状态也就是说每次请求和用户是谁都没有关联.所以不用担心当前用户能不能读取其他用户数据的问题.