利用SQL Server的全局临时表防止用户重复登录

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

        可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写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)

SQL全局临时表防止用户重复登录

为了防止用户的重复登录,在一开始想到的一种方法: 在用户表中添加一个字段,登录后写1,退出后写0.这样子在用户登录进行检查的时候判断这个字段是否为0,如果是0那么就可以登录;但是这样子就又带来了新的问...
  • lypf19900912
  • lypf19900912
  • 2013年06月28日 09:41
  • 2950

防止用户重复登录

项目笔记:最近做了个防止用户重复登录的需求:部分站点的用户登录系统后,如果没有退出,将不允许再次登录。 项目简介:spring security ,redis(分布式) 。项目实现的很多底层的jar包...
  • xihuanxiaoxin
  • xihuanxiaoxin
  • 2017年04月07日 17:11
  • 1531

SQL SERVER临时表的使用

转载:http://www.cnblogs.com/shineqiujuan/archive/2008/11/13/1332657.html drop table #Tmp   --删除临时表#Tm...
  • ycl295644
  • ycl295644
  • 2015年04月27日 15:09
  • 3636

SQL临时表相关记录(WITH AS,#TMP)

一.WITH AS的含义      WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时...
  • zlhxiaohui
  • zlhxiaohui
  • 2014年10月11日 19:36
  • 570

SQL Server 表变量和临时表系列之概念篇

问题引入 “菜鸟啊,最近我看到阿里云开发者论坛的数据库RDS中有人在提SQL Server表变量和临时表如何选择的问题,你去深入探讨下这个问题吧,解答解答他们的疑惑吧”,老鸟又开始为菜鸟找活干了...
  • lishimin1012
  • lishimin1012
  • 2017年01月06日 14:37
  • 508

sqlserver 存储过程 临时表 时间计算 循环 问题

今天要做统计网站访问量的功能。结果存储过程不会,各种系统函数也不会用。客户那边还没网络。着实憋气了。 下面是查到的一些东西 一 、临时表的使用 表名前使用一个#号,临时表是局部的,使用两个#号,临时...
  • luckysiesteven
  • luckysiesteven
  • 2015年02月02日 22:10
  • 1342

运用sql语句创建临时表

首先我们来熟悉下临时表的概念: 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时...
  • winbobob
  • winbobob
  • 2014年04月10日 13:57
  • 2388

SQL SERVER临时表的使用&表变量的使用

临时表: 创建临时表可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。 本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个...
  • S630730701
  • S630730701
  • 2016年08月03日 16:57
  • 2341

使用session监听禁止用户重复登录

在web应用中,常常需要禁止用户重复登录。这里,介绍的方法是通过配置session监听+shiro权限控制框架实现。具体的方法是: 用户登录成功后,将用户信息放入HashMap中,如果存在重复,强制...
  • football98
  • football98
  • 2016年10月10日 14:50
  • 1990

关于with as 作为查询片段的使用和与临时表#Table的比较

http://bbs.csdn.net/topics/300131856 一.WITH AS的含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你...
  • dahaizhiliang
  • dahaizhiliang
  • 2013年05月04日 15:49
  • 1286
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用SQL Server的全局临时表防止用户重复登录
举报原因:
原因补充:

(最多只允许输入30个字)