close window & logout

2007-04-29 10:11 am
我在做1個function,是當一個account有人login既時後,
其他人都不可以用這個account 去login

我的做法是第一次login的時候在database 里insert 1條record
logout的時後delete這條record
沒錯,這是可以做到的,但是如果user沒click"logout"
他直接把brower關掉的話,那個account就不可以再login了

session可以解決這問題嗎?
可以用什麼方法解決這問題?
ps.我是用php的

回答 (2)

2007-04-29 12:17 pm
✔ 最佳答案
個人覺得跟session沒關係,如果其他大大反對我這點,請指點

我建議你用timeout的方法去做

假設你set個active timeout做15分鐘,每當個active timeout倒數完畢後,你就開返個access right俾人

每次個user開任何一個page,總之要叫個server做任何野既時候,你都要將個active timeout重新set做15分鐘,如果15分鐘後,個user都冇load過任何page,咁你就要強迫開返個access俾任何人用,但係如果個user響15分鐘之後先load個page,咁你就迫佢重新login囉

明唔明我講乜?唔明既請再問啦

2007-04-29 19:00:26 補充:
請問樓下:php是server side script,請問怎樣可以detect到關browser事件?我只想到的是較醜陋的方法:用client side script(如javascript)來做個和應…例如關閉視窗時呼叫php…可是問題是…如果我用這個方法的話,假設我不是關browser,而是中斷/截斷連線,那麼個account就會永遠被鎖死了請問樓下高見

2007-04-30 04:26:33 補充:
其實timeout只係需要用一個date-type既variable就得,你或者可以save個variable響database到,我當你個timeout係15分鐘,假設一個user佢成功login既話,咁你就將佢login既時間save落呢個variable度(暫叫tmstmp),例如2007-5-10 16:30,咁你有2個cases,一個係當個account冇人用既情況下,一個係個account有人用緊既情況下…

2007-04-30 04:27:53 補充:
當個user login既時候,check佢既login時間係咪細過、等如或者大過(tmstmp 15分鐘),如果係等於或者大過,咁姐係冇人用緊,批准佢login,如果係細過,咁姐係有人用緊,唔俾login

2007-04-30 04:28:31 補充:
如果個user成功login既話:每當個login左既user佢load server任何一個page時候,check下個load既時間,如果係細過(tmstmp 15分鐘)既話,咁就update個tmstmp做最新時間,同埋批准個user load個新page,如果係等如或者大過(tmstmp 15分鐘)既話,logout個user,叫佢重新login

2007-04-30 04:31:06 補充:
我想feel8335的意思是呼叫類似session_destory的function來把session完結吧

2007-04-30 04:39:00 補充:
我唔會建議你用javascript既closed、onunload等的event來logout,而這樣是不會肯定logout過程成功執行,因為你是用server side scripts來assure login,client-side script的操作不能盡信,幾危險下,如果client side過邊唔reliable,或者有咩估唔到既事情發生,如crash,成個system好容易會有deadlock,咁樣其他user就永遠都唔會用到個system我想feel8335是有甚麼高見,請望佢能幫你解決session上既解決方法
2007-04-29 5:22 pm
没錯..session 是可以解決這個問題的...

load page
$_session[login]=='' << "you have no right, please login first" , 唔理db record
update db login record = false

當有人login
login name ,password 正確 + $_session[login]==''
then $_session[login] = true , database record login = true <<< 呢家login la

佢logout
kill $_session[login], db record login = false < logout 咗

佢close browser logout
kill $_session[login] , db record login = true < logout 咗

明未..唔明幫你死掂佢

[email protected]
參考: IT 人


收錄日期: 2021-04-13 00:24:10
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070429000051KK00484

檢視 Wayback Machine 備份