Re: [請益] PHP的登入權限管理
※ 引述《thinklu (包子)》之銘言:
: 不好意思~我是PHP的初學者
: 我正在做login的東西~
: 在一開始我用:
: session_set_cookie_params(60);
: session_start();
: 來設定timeout時間
: 接著我做了:
: $_SESSION['un'] = $username;
: 來指派值~
: 之後log in成功~我跳到了另一個php檔~
: 在一進去我就做了:
: if ( ! isset( $_SESSION['un'] ) ) {
: echo '<meta http-equiv=REFRESH CONTENT=3;url=login.php>';
: }
: 來確定使用者有log in~不然我就把他redirect出去
: 不好意思講一堆~現在問題來了~
: 我想做:
: if(/*timeout happens*/) {
: echo '<meta http-equiv=REFRESH CONTENT=3;url=login.php>';
: }
: 可是我不知道/*timeout happens*/ 應該要寫什麼~
: 可以請各位大大幫忙嗎?
: 我有先找過一堆資料了~可是沒有找到我想要的~
: 所以來這邊問問看各位~肛溫~
既然有問到「一般常見的Session登入怎麼做」
就借標題來分享(兼請教)一下
據我所知的常見登入/登出作法
是在每個需要帳號權限的頁頭都引入類似下面的檢查檔
<?php
session_start();
if (empty($_SESSION['Login'])){
header('Location:Login.php');
die();
}
?>
在登入頁面登入成功時$_SESSION['Login']='使用者登入的ID';
登出時則unset($_SESSION['Login']);
以上是最簡單的作法
但是最近需要用比較安全/保密的帳號登入管理
最好能夠掌控每個帳號的登入時間、從哪登入、同一時間只能由一臺電腦登入、
每次登入/取代時都會留下紀錄、視使用者idle時間而定的timeout機制
目前的想法如下
同樣在每個需權限頁面檔頭引入檢查檔
但是不使用Session,而是使用expire time為0的Cookie為紀錄
(在瀏覽器關掉後才會自動刪除的Cookie)
每次使用者登入成功後,程式自動產生一段random code,
作為login token給使用者的瀏覽器cookie紀錄
同時間,php會將此token碼的產生時間與登入IP存入一個token資料表中
該資料表有以下欄位
token(隨機字串),LoginTime(登入時間),ChangeTime(此token的最新活動時間),
LogOut(登出與否+登出方式),IP(此token所使用的IP)
檢查頁面差不多是以下結構
<?php
if (empty($_COOKIE['token'])){
//沒有授權token,轉向登入頁面
header('Location:Login.php');
//若登入成功時,該帳號擁有其他未登出的token,則將其kick out
die();
}
else{
$TokenData=.... //從資料表中取出該Token的資料
if (不存在此token || token之IP與瀏覽者不符){
/*
將此瀏覽者IP與嘗試時間存入錯誤資料表內
若短時間內某一IP嘗試錯誤過多,則拒絕此IP連線
*/
die();
}
elseif (token已經登出或被kick out){
//顯示相關錯誤訊息,並且請使用者重新登入
header('Location:Login.php');
die();
}
else {
//更新token的最新活動時間
}
}
?>
以上主要是拋磚引玉
希望有人有更好或差不多的作法可以分享、比對一下...XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.62.155
※ 編輯: mrbigmouth 來自: 218.170.62.155 (06/15 22:34)
推
06/16 00:17, , 1F
06/16 00:17, 1F
→
06/16 00:17, , 2F
06/16 00:17, 2F
→
06/16 00:18, , 3F
06/16 00:18, 3F
推
06/17 16:04, , 4F
06/17 16:04, 4F
推
06/18 00:32, , 5F
06/18 00:32, 5F
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
154
159