:::
7-3 用session機制讓系統記住管理員
一、關於 session
- 我們希望管理員登入後,側邊欄可以顯示發布文章按鈕,觀看文章時,也可以顯示編輯和刪除的按鈕
- PHP怎麼知道管理員有登入了呢?我們可以用 session 機制來做。
- session 會產生一個小檔案,來記住您要讓PHP記住的東西,這個小檔案是放在伺服器端的,所以,一般用戶是無法存取得到。
二、啟用 session
- 修改
header.php,在最前面加入session_start()以便在前後台都能啟用session機制(一定要放在最前面)<?php session_start(); require_once 'config.php'; require_once 'vendor/autoload.php'; require_once 'function.php'; - 修改
admin.php,凡能進到這裡的都是管理員,所以利用$_SESSION['is_admin']來讓系統記住是否為管理員<?php require_once 'header.php'; $_SESSION['is_admin'] = true;
三、在樣板中使用 session
- Smarty可以用
$smarty.超級全域變數.變數名稱的方式直接取用超級變數的值,也就是說,只要用$smarty.session.is_admin就可以知道是否為管理員 - 修改
templates/op_show.tpl,在文章下方加入返回(javascript:history.back())、修改(admin.php?op=create&id=編號)、刪除(admin.php?op=destroy&id=編號)等按鈕<h3>{$news.title}</h3> <div class="row"> <div class="col-md-9"> <div>{$news.author}</div> <div>{$news.date} 點閱數:{$news.views}</div> <div>{$news.content|nl2br}</div> <!-- 工具列 --> <div class="my-4"> <a href="javascript:history.back()" class="btn btn-outline-primary"> 返回 </a> {if isset($smarty.session.is_admin)} <a href="admin.php?op=create&id={$news.id}" class="btn btn-outline-warning"> 修改 </a> <a href="admin.php?op=destroy&id={$news.id}" class="btn btn-outline-danger"> 刪除 </a> {/if} </div> </div> <div class="col-md-3"> <!-- 側邊欄 --> ...略... </div> </div>看起來像這樣

- 修改
templates/index_side.tpl,在年度列表下方加入新增文章(admin.php)按鈕:<div class="list-group"> ...略... </div> {if isset($smarty.session.is_admin)} <div class="d-grid gap-2 mt-3"> <a href="admin.php" class="btn btn-success"> 新增文章 </a> </div> {/if}看起來像這樣:

-
區塊級別的按鈕用法可以參考:https://bootstrap5.hexschool.com/docs/5.0/components/buttons/#block-buttons
7-2 加入管理者認證