PHP 內建 session 機制


Posted by tzutzu858 on 2020-09-09

筆記 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 存在你的電腦

  1. 產生 session id (token)
  2. 把 username 寫入檔案
  3. set-cookie : session-id

在 index.php
前面一樣第一行一樣加 session_start();

$username = null;
if (!empty($_COOKIE['token'])) {
    $user = getUserFromToken($_COOKIE['token']);
    $username = $user['username'];
}

可以直接將 $username = $_SESSION['username'];
背後在做 :

  1. 從 cookie 裡面讀取 PHPSESSID(token)
  2. 從檔案裡面讀取 session id 的內容
  3. 放到 $_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 進去










Related Posts

實作 API 練習

實作 API 練習

自動化測試 x Puppeteer - 玩偶QA參一咖 Day04

自動化測試 x Puppeteer - 玩偶QA參一咖 Day04

MTR04_0825

MTR04_0825


Comments