原来的代码参见这里
http://www.qiuhao.com//dispbbs.asp?boardID=2&ID=6228&page=1

今天仔细看了这段代码,发现这段代码大有优化的余地

因为maxSessions 这个值可能会很大,我这里测试环境有3万多个,启动时要浪费半分钟左右

另外sessionId是个随机数,用1到maxSessions其实是很少有命中的(sessionId大家可以在标题栏上看到)

本来想顺着管理员的思路优化(但没弄通,把思路写在这里供大家参考)

1. xSession::numSession返回当前已经注册的会话 ,所以当这个数字是1是就不用查了

2. 用户的查询是否可以放在一开始进行呢,重复执行没有必要

3. 仅仅遍历1-xSession::numSession的用户,但这个没弄通因为sessionId不是和1-xSession::numSession的顺序数对应的

所以我就找能一次获得所有会话列表的途径,其实在管理-联机用户中就有,就是SysClientSessions表

所以,这个任务就很简单,变成查询这个表的事情

void startupPost()
{

    SysClientSessions sessions;
    userId currentUserId;
    int loginNum;
    ;

//只有一个会话,当然不需要检查
      if (xSession::numSession()==1)
        return;
      currentUserId   = curUserId();

      while select userId  from sessions  where sessions.userId==currentUserId{

            loginNum++;
            if (loginNum>1){
                Box::stop("@GCN996"); //提示文本,不能重复登录之类的,自己替换
                infoLog.shutDown(true);
                return;


             }

      }

      return;

}

其实大家可以发现,这个查询本来可以更简单的,像

select count(sessionId) from sessions group by userId where sessions.userId==currentUserId;

不知道怎么回事,这代码在我这里就是编译不了,所以改成上面这样的了

转载于:https://www.cnblogs.com/jjx/archive/2008/07/17/1245022.html

避免一个用户多次登录修改版相关推荐

  1. java中限制多人登录的_Spring Boot + Spring Security 防止用户在多处同时登录(一个用户同时只能登录一次)及源码分析...

    网上很多文章的实现方法写得比较复杂 这里介绍一个简单的方法. 实现 @Configuration @EnableWebSecurity public class SecurityConfigurati ...

  2. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...

    程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...

  3. Flask初识,第五篇 ,做一个用户登录之后查看学员信息的小例子

    Flask最强攻略 - 第五篇 做一个用户登录之后查看学员信息的小例子 需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重 ...

  4. 限制在同一台电脑上只允许有一个用户登录系统

    在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制. 具体一点就是: 1.在同一台电脑上一次只允许有一个用户登录系统: 2.一个用户在同一时间 ...

  5. java限制在同一台电脑上只允许有一个用户登录系统

    在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制. 具体一点就是: 1.在同一台电脑上一次只允许有一个用户登录系统: 2.一个用户在同一时间 ...

  6. Flutter 一个优美的用户体验的登录页面 抖动提示 文本提示

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力 Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日 ...

  7. flutter 一个用户登录页面

    一个用户登录页面 输入校验 import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart';void m ...

  8. 一个用户只能登录一次

    仅仅思路,这是springsecurety的 package com.dbapp.fly.config.security;import java.io.IOException; import java ...

  9. java写一个登录系统_用java写一个用户登陆界面

    一.课堂测试源代码及其结果截图 用java的swing写一个用户登录界面,采用网格布局.源代码如下: /** * */ package LiuLijia; import java.awt.CardLa ...

最新文章

  1. 让PyTorch训练速度更快,你需要掌握这17种方法
  2. 如何写好一篇科技论文?以Wiley科技刊为例(附视频)
  3. 微信公众平台关于fakeid和openid的解析
  4. webpack 3.1 升级webpack 4.0
  5. MySQL DELETE:删除数据
  6. 二值mask图像 + RGB原图 生成可视化分割结果; 从二值mask获取分割轮廓点
  7. 管理Exchange 2003客户端访问
  8. Statement violates GTID consistency: CREATE TABLE ... SELECT.
  9. 包装模式就是这么简单啦
  10. 疯狂Java讲义P179单例
  11. matlab中的小于等于,ps中如何画出小于等于符号
  12. 嗨,我亲爱的朋友们!心存感恩
  13. GIS 地图坐标系相互转换的方法学习笔记
  14. 转载 ps教程制作立体字
  15. Android基础新手教程——4.1.3 Activity登堂入室
  16. YOLOv3 cfg文件详解
  17. JS对XML格式化与美化
  18. 2022数维杯问题 C:如何利用大脑结构特征和认知行为特征诊断阿尔茨海默病-多思路+代码分享
  19. 计算机10秒后重新启动,电脑自动反复重启,CPU风扇转十几秒就停了
  20. match against mysql_Mysql全文搜索match against的用法

热门文章

  1. 吴恩达“机器学习”——学习笔记二
  2. Xtreme8.0 - Kabloom dp
  3. C#基于Socket的CS模式的完整例子
  4. Swift傻傻分不清楚系列(四)基本运算符 o_O!???
  5. Vue -项目创建(rem适配项的设置)
  6. 高并发的理解和使用场景-----特意区别和多线程的关系
  7. h5-plus.webview
  8. Codeforces Round #540 (Div. 3)(部分题解)
  9. Vue学习【第六篇】:Vue-cli脚手架(框架)与实战案例
  10. Camera Vision - video surveillance on C#