線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2536
推到 Plurk!
推到 Facebook!

如何控管登入系統帳號不可重覆 ?

答題得分者是:agogorz
Louis_H
一般會員


發表:7
回覆:19
積分:10
註冊:2005-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-19 09:46:39 IP:64.62.xxx.xxx 未訂閱
使用 Delphi 6 + MS SQL 設計一套系統程式
設計每個登入帳號 不可重覆登入系統功能
在Login 成功後有紀錄該帳號狀態 set 1 (default 0)
在登出或關閉From有紀錄該帳號狀態 set 0
當然就會在 Login 時判斷 該帳號狀態 為 0 才可登入
但是,如果是因為 網路斷線 / 當機 造成的關閉系統動作
使用 上述 方式 已登入成功的帳號狀態就不會更新回 0
請問各位先進有沒有什麼比較淺顯易懂的指教方式,謝謝 !!
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-19 13:13:10 IP:222.188.xxx.xxx 訂閱
在sql端写一个trigger或者storeprocedure,在数据库重新开启时执行清除标记;同时定时检查帐号登陆时间,超时无操作则清除标记。
------
====================
我为一切作努力!
Justin Shen

agogorz
初階會員


發表:9
回覆:34
積分:28
註冊:2005-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-19 17:30:53 IP:59.124.xxx.xxx 訂閱
有幾種作法:
1.設將LOGIN的欄位值設為用程式發送,可用亂數並確定SERVER尚無此ID後再賦值
程式登入時將此值放到LOGIN的欄位值
TIMER檢查值跟本機的值相同與否,否則關掉程式
2.設TIMER每五分鐘UPD一次,並紀錄時間點,若UPD之時間超過5分鐘則SECOND PLAYER可登入
Louis_H
一般會員


發表:7
回覆:19
積分:10
註冊:2005-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-20 09:21:33 IP:64.62.xxx.xxx 未訂閱
應該說:有什麼方式能讓 資料庫 server 端 知道 這個 client 已經斷線 ? 的 資料庫系統表格 可查詢 ?
比如說:A Client 執行 系統 並成功 登入系統 ( link DB Server ),這時候 一定會有某個 Server 端的
系統表格 會紀錄著 被 A Client 連接,當 A Client 執行 登出 系統後,也能看出 A Client 已沒有連接
的訊息,如此是不是能比較容易判斷,也比較好寫該 表格 的 觸發程式 !!
請各位先進集思廣義一下囉! 謝謝~
Louis_H
一般會員


發表:7
回覆:19
積分:10
註冊:2005-10-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-20 09:36:56 IP:64.62.xxx.xxx 未訂閱
該如何判斷 超時無操作 ??
因為某使用者(Client)或許登入系統,進入某作業功能畫面後,因為其它急事而暫時離開座位,
此時系統應該正常停留在使用者最後的作業功能畫面,不該將其踢出或自動關閉系統...
再者, Timer 定時判斷的機制對於 Client 的應用程式會不會要調整的部份會很多(每個操作畫面都要加
才能確實更新 Login Table 中該帳號的UpdateDateTime值) ??

還沒開竅領悟的新手.
wangyunyong
一般會員


發表:1
回覆:9
積分:12
註冊:2007-02-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-20 10:58:55 IP:218.90.xxx.xxx 訂閱
在客户端打开程序后用timer来定时去更新当前用户的updatetime字段的值(五分钟更新一次),登陆进去时判断updatetime有没有超过五分钟,超过就表示已经断线了,不超过就表示用户在线。

sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-20 12:45:44 IP:124.10.xxx.xxx 訂閱
這樣的作法有一個風險,就是假如用戶端正在執行一個耗時很久的迴圈,而迴圈中又沒有寫 Application.ProcessMessages 的話
Timer 到了時間是無法啟動的
有兩種避免這種風險的辦法:
1. 每一個迴圈中都要加上 Application.ProcessMessages
2. 在執行序中執行 wangyunyong 說的動作

===================引 用 wangyunyong 文 章===================
在客户端打开程序后用timer来定时去更新当前用户的updatetime字段的值(五分钟更新一次),登陆进去时判断updatetime有没有超过五分钟,超过就表示已经断线了,不超过就表示用户在线。

------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
agogorz
初階會員


發表:9
回覆:34
積分:28
註冊:2005-04-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-22 09:18:51 IP:203.75.xxx.xxx 訂閱

===================引 用 Louis_H 文 章===================
該如何判斷 超時無操作 ??
因為某使用者(Client)或許登入系統,進入某作業功能畫面後,因為其它急事而暫時離開座位,
此時系統應該正常停留在使用者最後的作業功能畫面,不該將其踢出或自動關閉系統...
delpih的timer有一個ontimer事件,可以藉由這個event設事件 用法可以搜尋版上
再者, Timer 定時判斷的機制對於 Client 的應用程式會不會要調整的部份會很多(每個操作畫面都要加
才能確實更新 Login Table 中該帳號的UpdateDateTime值) ??
將timer放在main form就可以了,由timer觸發的事件定時自動更新資料庫
還沒開竅領悟的新手.
編輯記錄
agogorz 重新編輯於 2007-10-22 09:19:20, 註解 無‧
系統時間:2024-04-25 14:02:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!