X
    Categories: Program

PHP使用者-登入/登出流程

Cookie + Session + Database 來達成使用者登入、登出、未登出直接關閉瀏覽器時該注意的問題,以下流程就可以歸避了。非常重要的一篇文章~
取自BBS中 PHP版的文章. 做一點小修改.(完整文章於深入閱讀)

登入、登出、關閉瀏覽器 流程 :
使用者登入 ->
1. 用 uniquid 產生唯一的session 值 .
2. 將該 session 連同登入時間 存入 database .
3. 將該 session 值 存入使用者 cookie .
PS:
   關於 1. 跟直接用 session_id() 一樣, 就是剛進來就給他一個 session.
   (session 會自動產生一個 uniquid 的值, 來當 session 的名稱, 使用 session_id() 即可取用)

使用者已登入 ->
1. 每頁核對 cookie 的 session 與 datebase 的值, 且檢查時間是否已經超過 .
2. 若已經過期 ,則刪除該筆資料.

使用者登出 ->
刪除資料庫中的 session 值 . 同時刪除使用者 cookie .

使用者關閉瀏覽器 ->
由於產生的 uniquid 直不會重複,所以重開瀏覽器後需要重新登入.


session timeout問題
titan:
> 當使用cookie作為session handle時, 要如何同時
> 強制client(瀏覽器)關閉時 自動清除cookie,
> 而client(瀏覽器)尚未關閉時, cookie有自己的timeout時限
> 用php如何同時達成兩者
duan:
http://tw.php.net/setcookie
1. lifetime with the browser
expire: If not set, the cookie will expire at the end of the session
(when the browser closes).
2. check by time
set create time when cookie set, and check the timeout when browser
access server
供您參考. 🙂
titan:
但我希望的是兩這同時有效...
也就是當有設timeout的時候, cookie的確會timeout to expire
但是當cookie尚未達到timeout時間前關閉瀏覽器, browser不會自動清除cookie
而希望達成的目的是, 不管有沒有設timeout, 只要關閉瀏覽器,
就要刪除該cookie, 或者使該cookie失效(expire)
思索中...
duan:
唔....不好意思, 早上回覆的比較簡略, 弟的意思是說這兩個方法並用. 🙂
也就是說, 不要設 expire time, 於是 cookie's lifetime 就和 browser
一樣. 然後設 cookie 時, 同時記錄設 cookie 的時間, 在 browser access
網頁時, 檢查 cookie 是否超過想要限制的時間, 若超過則移除該 cookie.
以上未經實作, 理論上可行, 供您參考. 🙂
darkhero:
這樣的流程如何呢? :
使用者登入 -> 用 uniquid 產生一 session 值 .
將該 session 連同登入時間 存入 database .
將該 session 值 存入使用者 cookie .
使用者已登入 -> 每頁核對 cookie 的 session 與 datebase 的值 .
且檢查時間是否已經超過 .
若已經過期 ,則刪除該筆資料.
使用者登出 -> 刪除資料庫中的 session 值 . 同時刪除使用者 cookie .
使用者關閉瀏覽器 -> 由於產生的 uniquid 直不會重複,所以重開瀏覽器
後需要重新登入.

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post