筆記 PHP 語法基礎 最下面有提到 Huli 的 Session 與 Cookie 三篇文章
把實做的 cookie 改成內建 session 機制
要使用 session ,檔案最前面第一行要加上 session_start();
然後就可以開始刪刪刪
原本建立 token 對照 username 都可以刪掉
$token = generateToken();
$sql = sprintf(
"INSERT INTO tzu_tokens(token,username) VALUES('%s', '%s')",$token, $username
);
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
// 登入成功
$expire = time() + 3600 * 24 * 30;
setcookie("token", $token, $expire);
取而代之的是 :
$_SESSION['username'] = $username;
背後就是在做 :
把 session 存在你的電腦
- 產生 session id (token)
- 把 username 寫入檔案
- set-cookie : session-id
在 index.php
前面一樣第一行一樣加 session_start();
$username = null;
if (!empty($_COOKIE['token'])) {
$user = getUserFromToken($_COOKIE['token']);
$username = $user['username'];
}
可以直接將 $username = $_SESSION['username'];
背後在做 :
- 從 cookie 裡面讀取 PHPSESSID(token)
- 從檔案裡面讀取 session id 的內容
- 放到
$_SESSION
登出
原本清 cookie 是 :
require_once "conn.php";
$token = $_COOKIE['token'];
$sql = sprintf("DELETE FROM tzu_tokens WHERE token = '%s'", $token);
$conn->query($sql);
setcookie("token", "", 0);
全部刪掉,只要呼叫一行 session_destroy(); 就可以了
原本在 utils.php 裡做產生 token 並且對照 username 存到資料庫
$sql = sprintf("SELECT username FROM tzu_tokens WHERE token = '%s'", $token);
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$username = $row['username'];
這段都不需要
直接傳 $username 進去