我是新手,提个简单的问题。。。。。。。(50分)

  • 主题发起人 主题发起人 wd2306
  • 开始时间 开始时间
W

wd2306

Unregistered / Unconfirmed
GUEST, unregistred user!
我开发的软件是让不同的用户登陆,但是我突然发现,如果一个用户掉电或者异常退出,数据库里的标志位
不能改过来,所以下次不能登陆,这怎么办?
 
没有人回答吗?
 
用异常处理try except
 
增加一个功能为掉电按钮,让用户自己登陆,设定密码如何?
 
登陆后,马上对数据库 Post 呀。
 
可能我的意思你们不懂,我是说,一个用户登陆后,正在做一些事情,但是突然掉电,或者不知道什么原因,程序死了
这时只好重起,但是因为上次用户没有退出,数据库中的登陆标志没有改过来,所以这个用户时不允许登陆的。
关键我怎么监测用户的非正常退出
 
检测非正常退出,不如检测正常退出,设个标志,如果正常退出则...,非正常退出...
 
正常退出,我可以改标志位,但是我怎么知道一个用户正在使用,还是因为掉电重起
 
在别的地方,比如ini文件中也设一个标志
登陆的时候判断数据库中的和ini中的是否一致
从而判断是否异常退出
 
你可以在数据库中的用户登陆表中建一个Guid类型字段用于记录每个用户每次的登陆,当用户
下一次登陆时产生新的Guid字段,虽然用户名一样,但Guid可能不同,你可以让该用户登陆。
Guid值可以在客户端程序产生,传到服务端.
 
LGXing,:
用户掉电后,ini文件的标志还是保存着,还是还原为原来的值?
 
那这样,同一个用户,不就可以同时在两台机器上登陆了吗?
 
如果这样,你再增加一个字段记录每台计算机的IP就可以了!
 

这不是头痛医头脚痛医脚了吗?
这样拥护不就固定了每个用户的机器了吗?
 
我用的是创建全局临时表的方法,应该可以解决你的问题
 
很简单。只要退出。不管是什么状态都给他把标志位初始不就解了。。。
 
想请问一下,你的程序在同一台机的同一时间段是否只能有一个用户登陆(我想应该是的)?
如果是这样,那就好办了.通常这种做法是:用户登陆成功后,将其用户名赋值给一全局变量,
这样可以在程序运行时的任何地方调用;如果用户尚未登陆,则该全局变量为空,否则不为
空.(用户名一般不能为空).这样就可以解决你的问题.如下表:
打标志 变量为空 状 态
T T 上次未正常退出,如断电等
T F (这种情况一般不可能出现,除非用户名为空或忘了赋值)
F T 登陆成功,但改变标志状态时失败,数据未写入
F F 正常未登陆的情况
根据上表,就以很好的解决你的问提了.
 
这个问题一般通过服务器端的session解决比较好一些
 
*其实ini文件中记录的是登录的用户名*
比如:你用zhanghua登录,
正常情况是:
1、登录后,将其标志为已登录,ini文件中是zhanghua,
这样别的用户将不能用此账户登录了;
2、退出后,将其标志为未登录,ini文件中清空
这样别的用户将可以用此账户登录了;
异常:
1、登录后,将其标志为已登录,ini文件中是zhanghua,
这样别的用户将不能用此账户登录了;
2、断电等异常退出,其标志未能或“不”被复原;ini文件中还是zhanghua,
用户再次登录时:
1、不是zhanghua,当然是正常的;由于ini文件中是zhanghua,
从而得知zhanghua上次是异常退出,将zhanghua标志为未登陆
2、是zhanghua,由于ini文件中是zhanghua
从而得知zhanghua上次是异常退出,登录成功
3、退出后,将其标志为未登录,ini文件中清空
这样别的用户将可以用此账户登录了;

这样可以保证不管是:
1、只是服务器断电
2、只是客户机断电
3、服务器、客户机都断电
都可以正常恢复
 
后退
顶部