在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。

可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录。但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将标志位置为0,那么下次以该用户工号登录则不可登入,这该怎么办呢?

或许我们可以换一下思路:有什么东西是在connection断开后可以被系统自动回收的呢?对了,SQL Server的临时表具备这个特性!但是我们这里的这种情况不能用局部临时表,因为局部临时表对于每一个connection来说都是一个独立的对象,因此只能用全局临时表来达到我们的目的。

好了,情况已经明朗话了,我们可以写一个象下面这样简单的存储过程:

create procedure gp_findtemptable -- 2001/10/26
21:36 zhuzhichao in nanjing

/* 寻找以操作员工号命名的全局临时表

* 如无则将out参数置为0并创建该表,如有则将out参数置为1

* 在connection断开连接后,全局临时表会被SQL Server自动回收

* 如发生断电之类的意外,全局临时表虽然还存在于tempdb中,
但是已经失去活性

* 用object_id函数去判断时会认为其不存在.
 */
@v_userid varchar(6), -- 操作员工号
@i_out int out -- 输出参数 0:没有登录 1:已经登录
as
declare @v_sql varchar(100)
if object_id(''''tempdb.dbo.##''''+@v_userid) is null
begin
set @v_sql = ''''create table ##''''+@v_userid+
''''(userid varchar(6))''''
exec (@v_sql)
set @i_out = 0
end
else
set @i_out = 1

在这个过程中,我们看到如果以用户工号命名的全局临时表不存在时过程会去创建一张并把out参数置为0,如果已经存在则将out参数置为1。

这样,我们在我们的应用程序中调用该过程时,如果取得的out参数为1时,我们可以毫不客气地跳出一个message告诉用户说”对不起,此工号正被使用!”

(测试环境:服务器:winnt server 4.0 SQL Server7.0 工作站:winnt workstation)

文章来自: 好喜爱学习网(http://www.haoxiai.net/) 网址:http://www.haoxiai.net/wangzhanzhizuo/shujuku/59391.html

转载于:https://www.cnblogs.com/lindayyh/archive/2010/04/05/1704763.html

巧用SQL的全局临时表防止用户重复登录相关推荐

  1. 巧用SQL server的全局临时表防止用户重复登录

    内容摘要:SQL Server的临时表具备这个特性!但是我们这里的这种情况不能用局部临时表,因为局部临时表对于每一个connection来说都是一个独立的对象,因此只能用全局临时表来达到我们的目的. ...

  2. 我是SQL小菜鸟---SQL全局临时表防止用户重复登录

    先介绍一下什么是sql临时表及使用方法 临时表  SQL Server 支持临时表.临时表就是那些名称以井号 (#) 开头的表.如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时 ...

  3. 合作开发收费系统——临时表解决用户重复登录问题

         用户重复登录问题,是指同一个用户能够用自己的账户和密码能够同时多次登录.这样的情况在实际使用中是不允许的,就跟QQ.飞信一样,如果你已经登录,等到再次登录的时候,系统就会提醒你" ...

  4. 防止论坛用户重复登录的方法 .

    本例完成的功能就是防止用户重复登录!若用户已经登录,则当其再次登录时,弹出提示框后返回! 实现思路:用户登录成功后,将用户登录信息存放到Hashtable类型的Application["On ...

  5. 使用session监听+spring MVC拦截器禁止用户重复登录

    在许多web项目中,需要禁止用户重复登录.一般来说有两种做法: 一是在用户表中维护一个字段isOnLine(是否在线),用户登录时,设定值为true,用户退出时设定为false,在重复登录时,检索到该 ...

  6. asp.net mvc 自定义全局过滤器 验证用户是否登录

    一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面 对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高 ...

  7. 简单判断用户重复登录,记录一下

    Code //判断用户是否重复登录 string key = TextBox1.Text; //用户名文本框设为cache关键字 string uer = Convert.ToString(Cache ...

  8. 可以通过限定ip来限制用户重复登录么_美团和饿了么虽然每天都送红包,但有很大区别...

    现在人的生活中少不了外卖,满街随处可见黄的或者蓝的外卖骑手,大家最熟悉的应该是美团和饿了么,毕竟这两个外卖平台占了绝大部分的外卖市场,很多人点外卖会在乎有没有优惠,今天就和大家说说美团和饿了么的优惠有 ...

  9. 防止用户重复登录解决方案

    前一段时间碰到一个需求:一个账号只能登录一次,不能重复登录问题. 在网上找了下,大概有两种解决方案: 1.通过数据库状态位判断该用户是否已经登录. 2.利用session监听器监听每一个登录用户的登录 ...

最新文章

  1. 如何使用OpenCV实现图像均衡???
  2. 小圈子.大社交:利用圈子引爆流行
  3. 【NOIP2012-开车旅行】
  4. 响应json数据之响应json格式数据
  5. 1300多名硕博研究生被清退!全都是活该?真相有时候比表面更让人无奈......
  6. debian9.4网络配置及永久静态默认路由
  7. 《CLR via C# 》第三版 英文原版电子书下载
  8. 【web前端期末大作业】html网上在线书城大学生静态网页 大学生html当当书城仿站 网上书城购物网页作业HTML
  9. iOS 此时无法下载应用程序
  10. 桌面上计算机图标被误删,电脑桌面图标被误删?两个方法轻松帮你找回,根本不需要重装系统...
  11. 基于Matlab遗传算法工具箱解决物流中心选址
  12. 将ES6的语法转为ES5(为了兼容 ES5) (Babel)
  13. 编程要从娃娃抓起,北乔治亚大学教授的python编程指南在此
  14. python中超集、子集、并集、交集、差集等
  15. 关于 The document “(null)” requires Xcode 8.0 or later. 解决方法
  16. Linux主机熵值不足导致SecureRandom线程阻塞问题
  17. 社交电商平台实际包含的意义是一种工具,而不是固定的模式。
  18. Swift常用基础知识(二)
  19. python修改单个文件
  20. PHPExcel大文件导入数据库

热门文章

  1. abaqus利用python实现部件合并_在abaqus python中使用Element()构造函数创建部件元素...
  2. linux ibus中文,Ubuntu 14.10系统中IBUS 中文输入法安装的图文教程
  3. oracle左右结合,oracle中的左右连接
  4. python大作业代码_大二期末python大作业有效代码不低于5000行是什么水平?
  5. STM32F103单片机生成16路PWM波
  6. MyBatis-Plus分页查询——Page
  7. Redis五大数据类型String、Hash、List、Set、ZSet
  8. NYOJ-会场安排问题(贪心)
  9. centos7.5 mysql5.7 的卸载和离线安装全过程
  10. 图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波