机房收费系统 之 登录BUG (二)

来源:互联网 发布:淘宝换货能用运费险吗 编辑:程序博客网 时间:2024/05/18 13:07
声明:以下内容只对在登录时一个用户名不能同时多次登录系统的同学适用!




       继上一篇博客《机房收费系统 之 登录BUG》的发表,很多同学及大神对我的这种采用超级密码的登录方式产生了歧义,同时也给我了更多的灵感,在这里要特别感谢给我提出建议的同学及大神!


       今天的登录不采用超级密码,不再是后门程序!实现功能:当一个用户已经登录在线,这个用户可以在本地或者异地继续登录,第二次登录以后,第一次登录的系统会给出相应提示,然后关闭程序。下面就给大家详细讲讲是怎么样的思路:


       首先登录用户名为"1"的用户,看看我们的数据库记录:
        


       然后继续在本地打开一个程序,继续登录用户名为"1"的用户,系统会给出相应的提示,然后跳转登录页面:
                                         


                                         


       如果我们这时候点击确定,那么用户名为"1"的用户就会强制登录系统,这会再来看看我们的数据库记录:
        


       从数据库的记录我们可以看出,第二次登录成功的时候,将第一次登录的正在值班的记录更新,令注销日期和注销时间等于第二次登录时的登录日期和登录时间,同时更改状态。


       我们更改了数据库的记录,那我们电脑上就同时有两个相同用户名登录的两个程序?当然不是,现在看看我们的第一个程序得到的提示,点击确定以后,程序就会关。
                         


       通过上面的步骤阐述,相信大家都觉得这种方法能够实现大家想要的那种登录,但是这种方法到底是怎么实现的呢?下面继续给大家阐述一下原理:


       1.当用户名为"1"的用户第二次登录的时候,需要将第一次登录的记录更改状态,同时插入一条新的登录记录。

       2.当用户第二次登录成功以后,怎么样让第一次登录的程序出现相应提示并且关闭呢?在这里我用的是一个Timer控件,当登录的时候会在程序中保存一份当前的登录记录,其中包括登录的日期和时间,然后系统每隔一秒钟在数据库中查询一次,如果登录日期和时间相同的记录已经被注销了,那么系统就会出现相应提示:

                                                    

                       

                           


       今天介绍的这种方法虽然实现了大家一般印象中的登录,但是还是有一点瑕疵,就是这个Timer控件,每一秒都在数据库中查询一次,如果数据库中的记录特别多的话,就会增加数据库的压力!


        对于上述的问题,我能想到的办法就是建一张正在值班的表,正在值班表里面没有那么多值班记录,每次查询的时候应该会相应轻松一点,但是,这也不是解决问题的根本办法,希望大神们有什么更好的方法可以介绍给我...


       虽然这种方法用了Timer控件,需要每一秒钟查询一次,就像有的同学说的那样是投机取巧,但是能够自己想出来,并且做出来也是挺高兴的,希望大家能给点其他不同的意见...


       





9 1
原创粉丝点击