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