qq九仙官网我们同一时间出现在同一地方,为...

有关于同一时间用户只能在一个地方登录的问题 -
- ITeye技术网站
博客分类:
有关于同一时间用户只能在一个地方登录的问题
以下内容可能将的有点罗嗦思路或者不清晰请各位高手手下留情肯定有更好的方法了各位高手如果有的话可否分享一下谢谢
1.在服务器用户每次登录都不一致但是内容中的登录信息或许一致但是这里还存在一个时间差如何判断同一个用户在别的地方登录呢
可以比对时间根据时间大小来判断当然时间大的就需要留下来了小的自然就需要删除了
这时候又出现一个问题你如何知道服务器中那些是同一个用户的呢所以自然需要保持同一个用户的在服务器最好是唯一
首先需要有个地方保存不管你登录几次都可以保存在这里这里只是说的登录如果要做其他操作那么最后登录的肯定是没问题的但是其他登录的就会提示此用户已在其他地方登录
现在说说保存的地方我使用的是用户名,时间,但是使用时间比较复杂可以简化一下使用用户登录次数这个数值也是处于一直变大的情况中那么保存的数据就变成用户名,登录次数,
那么现在假设一下存的地方也是,假设为
那么同一个用户第一次登录都会发生
HashMap b=new HashMap();
B.put(1,session对象
A.put(admin,b)
第二次登录
HashMap b=new HashMap();
B.put(2,session对象
A.put(admin,b)
第三次登录
HashMap b=new HashMap();
B.put(3,session对象
A.put(admin,b)
现在用户在不同的地方登录了三次。
按我们的需求来说前两次在有其他操作就会提示此用户已在其他地方登录
当然第一次的登录和第二次的登录后的操作完全是独立开来的就是说第一次登录和第二次登录后再有其他操作都会提示此用户已在其他地方登录,不分顺序先后而第三次就没有影响啦因为第三次是最后登录的当然不会有影响的
现在该说说如何让第一次和第二次登录后的操作提示此用户已在其他地方登录了
首先该有拦截器拦截器中怎么判断呢肯定是根据用户名来判断了因为我们存的地方就是用用户名当做标示来存的如果有是不是该将这个删除掉呢删除掉以后提示
此用户已在其他地方登录,页面刷新是不是页面就再次处于未登陆的情况呢
比较简单吧我在当时做的时候下了功夫不少主要是怎么保存里保存什么经过几次考虑以及不少的测试才决定先将和登陆次数保存在中在将和用户名保存在中肯定还有其他办法的
下面说说怎么比较中的数据吧
上面已经说过 保存用户名和的地方
如果当前登陆用户如果在不存在,那么需要添加
如果存在,那么是不是该比较里面的了呢
这里还有一个问题只有一个用户登录的时候也会经过过滤器那么需要当前用户名在中的数量必须大于了
大于一就要开始循环了这里的时候就发现怎么循环呢我使用迭代和比较合适
首先你需要全部将中某用户的信息循环一遍根据当前操作的和是保存在中是否一致,一致的话将中的取出来也就是我们存在的登录次数
在一次循环是不是该判断取出的和中的可以比大小了取出的必须是小于中存放的才能够删除的这里不需要标示一下如果小于立马停止循环
第三次开始对比了上面已经标示了是否小于中的了如果标示成立那么循环中就需要比较一致的了找到了就可以删除了当然删除了自己同时要将清除掉这样是不是就可以了呢
以下是部分代码
获取登录次数
int dates=webUserManager.get_login_num(result.get("CH").toString());
MySessionMapClass.replaceSession(request.getSession(),result.get("CH").toString(),dates);
public class MySessionMapClass {
private static Map onlineSessionMap = new HashMap();// 已登录的会话列表
public static boolean replaceSession(HttpSession newSession, String kskh,int dates) {
boolean flag = false;
if (onlineSessionMap.containsKey(kskh)) {
//获取ch对应的hashmap
HashMap newHms=(HashMap)onlineSessionMap.get(kskh);
newHms.put(dates,newSession);
onlineSessionMap.put(kskh, newHms);
flag = true;
// 如果会话列表中不包含该会话,则添加
HashMap hms=new HashMap();
hms.put(dates,newSession);
onlineSessionMap.put(kskh, hms);
flag = false;
* 比较新会话和旧会话的ID,如果ID相同,则表示是同一个用户,返回true
* @param session
* @param kskh
* @return boolean ID相同返回true,
public static boolean isSameSession(HttpSession newSession, String kskh) {
boolean flag = false;
HashMap maps = new HashMap();
// 获得旧会话
maps = (HashMap) onlineSessionMap.get(kskh);
if(maps!=null){
if(maps.size()&1){
//因为MAP中存储的键是日期时间字符串 值是session对象
留下最大的日期字符串
删除其他的session
String dates="";
//找出session对应的日期字符串
Iterator it = maps.entrySet().iterator();
while(it.hasNext()){
java.util.Map.Entry entry = (java.util.Map.Entry)it.next();
String keys= entry.getKey().toString();// 返回与此项对应的键
HttpSession values= (HttpSession)entry.getValue(); //返回与此项对应的值
if(newSession.getId().equals(values.getId())){
Iterator it1 = maps.entrySet().iterator();
while(it1.hasNext()){
java.util.Map.Entry entry = (java.util.Map.Entry)it1.next();
String keys= entry.getKey().toString();// 返回与此项对应的键
HttpSession values= (HttpSession)entry.getValue(); //返回与此项对应的值
if(Integer.parseInt(dates)&Integer.parseInt(keys)){
flag=true;
Iterator it2 = maps.entrySet().iterator();
while(it2.hasNext()){
java.util.Map.Entry entry = (java.util.Map.Entry)it2.next();
String keys= entry.getKey().toString();// 返回与此项对应的键
HttpSession values= (HttpSession)entry.getValue(); //返回与此项对应的值
if(flag==true){//删除自己
if(dates.equals(keys)){
maps.remove(keys);
values.invalidate();
}else{//删除别人
//if(!dates.equals(values)){
//maps.remove(keys);
//values.invalidate();
flag=false;
} catch (Exception e) {
flag=false;
}public static boolean isSession(HttpSession newSession, String kskh) {
boolean flag = false;
HashMap maps = new HashMap();
// 获得旧会话
maps = (HashMap) onlineSessionMap.get(kskh);
if(maps!=null){
if(maps.size()&1){
flag=true;
} catch (Exception e) {
flag=false;
public static void delSessionFromMap(String kskh){
if(onlineSessionMap.get(kskh)!=null){
onlineSessionMap.remove(kskh);
public static boolean containKey(String kskh){
return onlineSessionMap.containsKey(kskh);
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest requestMy=(HttpServletRequest)
HttpServletResponse responseMy=(HttpServletResponse)
String requesetUrl=requestMy.getRequestURI();
System.out.println("================================");
if(requestMy.getSession()!=null&&requestMy.getSession().getAttribute("CH")!=null&&requesetUrl.indexOf(".jsp")&-1){
HttpSession session=requestMy.getSession();
//判断是否在登录状态
System.out.println("+++++++++++++++++++++++++++");
if(MySessionMapClass.isSession(session,requestMy.getSession().getAttribute("CH").toString())){
boolean flag=MySessionMapClass.isSameSession(session,requestMy.getSession().getAttribute("CH").toString());
//提示已在异地登陆
System.out.println("----------------------"+flag);
//获取不限制异地登陆的账号
//questMy.getSession().getAttribute("CH")
CommonService CommonService = (CommonService) this.getBean("commonService");
Map parameter=new HashMap();
parameter.put("CH", requestMy.getSession().getAttribute("CH").toString());
Map result = (Map) CommonService.queryForObject("get_code_fliter_login.select",parameter);
if(result!=null){
System.out.println("测试会员===========================");
if(result.get("CH")!=""&&result.get("CH").equals(requestMy.getSession().getAttribute("CH").toString())){
chain.doFilter(requestMy, responseMy);
System.out.println("---=======================-------"+flag);
response.setContentType("text/charset=UTF-8");
response.getWriter().write("&script type=\"text/javascript\"&alert('您的账户已经在别处登录!');window.location.reload();&/script&");
chain.doFilter(requestMy, responseMy);
chain.doFilter(requestMy, responseMy);
chain.doFilter(requestMy, responseMy);
&!--EndFragment--&
duinibuhaome
浏览: 20904 次
来自: 太原
各位高手们,有没有更好的方法呢 ,这样做起来有点麻烦呀,现在又 ...
好几年前的代码了 已经没保存了
楼主,你好,我现在很需要这个,能发个完整的代码吗 167749 ...
能否发个例子
楼主,您的这个例子是我现在急需的东西,您看到留言能否发 ...QQ九仙怎么结婚
作者:米高来源:游戏攻略发表时间:评论()
内容摘要:QQ九仙怎么结婚 结婚系统详细介绍您和异性好友好感度达到100,000以上即可发起求婚; 就可以和对方组成队伍并同一线路,来到月老身边向对方求婚(由队长进行操作),对方同意后即可结为仙侣。 求婚时需要先...
相关标签:
QQ九仙怎么结婚
结婚系统详细介绍您和异性好友好感度达到100,000以上即可发起求婚;
就可以和对方组成队伍并同一线路,来到月老身边向对方求婚(由队长进行操作),对方同意后即可结为仙侣。
求婚时需要先选择送给对方一件信物来表达爱意。
求婚时双方必须保持在月老附近,不然月老无法做你们的见证。求婚前先确定对方会接受,不然送出的信物可不会退回哦!
结为仙侣后,双方可以获得心心相印的属性加成。仙侣间好感度越高,心心相印加成也就越多哦!
每对仙侣可以举行一次结婚典礼,乘坐精美的婚车在玉京城内巡游、发放喜糖、观赏烟花。(敬请期待)
求婚见证人,位于玉京城东南角的月老处&&
在与月老对话选择求婚,在购买信物之后,点击求婚界面下方的【求婚】按钮,即可发出求婚请求&&
心心相印属性加成&&
互为仙侣的玩家,将会获得额外的属性加成,即心心相印,心心相印名称同求婚时所送信物名称。
心心相印的属性加成由求婚时所送信物及心心相印等级共同决定。
心心相印等级与仙侣双方好感度相关,好感度越高则心心相印等级越高;仙侣双方好感度达到一定值,心心相印自动升级,所以婚后还需要不断地继续努力提升好感度,才能天长地久。
心心相印图标显示在角色属性界面中,婚后点击自己的心心相印图标,跳出仙侣界面。也可以在该界面将定情信物更换成更高级的信物。
心心相印在角**面的图标,鼠标移上去可以显示定情信物带来的属性加成&&
和平分手,需要双方组队前往玉京城月下老人处办理。和平分手不需要任何花费,双方好感度将降低至50000。
强制离婚,仙侣双方任意一人都可以进行。强制离婚后双方好感度降为1000。
结为夫妻的仙侣,在双修打坐时时,不仅比普通双修离得更近,浑身散发的光环也会变成粉红色;当持有顶级定情信物时,还有心型动画特效围绕在周围;
查看更多QQ九仙精彩内容,请
更多精彩内容请关注官方微博:
数据统计中!!
玩家评论共有11位网友发表了评论
Ctrl+Enter 快速回复
17566娓╅Θ鎻愮ず
鍝庡憖锛侀〉闈㈠嚭鐜伴敊璇?簡~
最新攻略01-15日01-09日01-09日01-09日01-06日01-06日12-31日12-31日12-27日12-23日

参考资料

 

随机推荐