
PHP 登入系統中用於安全「記住我」功能的持久Cookie
簡介
簡介
在PHP 登入系統中實現「記得我」功能需要在使用者的瀏覽器。此 cookie 允許使用者即使在關閉瀏覽器或重新啟動裝置後仍保持登入狀態。
資料庫結構
1 2 3 4 5 6 7 8 | CREATE TABLE `auth_tokens` (
`id` integer(11) not null UNSIGNED AUTO_INCREMENT,
`selector` char(12),
`token` char(64),
`userid` integer(11) not null UNSIGNED,
`expires` datetime,
PRIMARY KEY (`id`)
);
|
登入後複製
要安全地儲存「記住我」信息,請在你的資料庫:
選擇器和令牌字段將用於存儲記住我
登錄後
1 2 3 4 5 6 7 8 9 | setcookie(
'remember' ,
$selector . ':' . base64_encode ( $authenticator ),
time() + 864000,
'/' ,
'yourdomain.com' ,
true,
true
);
|
登入後複製
當用戶登錄並選擇“記住我”選項時,生成一個隨機選擇器(12 個字元)和一個驗證器(33 個字元) bytes) 使用random_bytes() 函數或類似的方法來確保隨機性。
使用以下內容設定記住我 cookie code:
將選擇器、雜湊驗證器、使用者 ID 和過期時間插入 auth_tokens 表。
頁面載入時重新驗證
-
在後續頁面載入時,如果使用者尚未登入並且記得我cookie 為set:-
- 從cookie 中提取選擇器和驗證器。
- 在 auth_tokens 表中查詢具有符合選擇器的行。
比較計算出的雜湊值使用 hash_equals() 使用儲存的雜湊驗證器擷取驗證器。
如果雜湊匹配,則透過設定會話資料並重新產生登入令牌來使用戶登入。
- 詳細資料
-
碰撞抵抗: 9位元組選擇器提供72位元防衝突性,33位元組驗證器提供264位元防衝突性。位元.
-
雜湊驗證器:儲存驗證器的 SHA256 雜湊可以降低與資訊外洩相關的風險。
恆定時間比較:單獨的選擇器和驗證器欄位消除了對資料庫查找的潛在計時攻擊。
以上是如何使用持久 Cookie 在 PHP 登入系統中安全地實現「記住我」功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!