:::

7-3 用session機制讓系統記住管理員

一、關於 session

  1. 我們希望管理員登入後,側邊欄可以顯示發布文章按鈕,觀看文章時,也可以顯示編輯和刪除的按鈕
  2. PHP怎麼知道管理員有登入了呢?我們可以用 session 機制來做。
  3. session 會產生一個小檔案,來記住您要讓PHP記住的東西,這個小檔案是放在伺服器端的,所以,一般用戶是無法存取得到。

二、啟用 session

  1. 修改 header.php,在最前面加入 session_start() 以便在前後台都能啟用session機制(一定要放在最前面)
    <?php
    session_start();
    
    require_once 'config.php';
    require_once 'vendor/autoload.php';
    require_once 'function.php';
    

     

  2. 修改 admin.php,凡能進到這裡的都是管理員,所以利用 $_SESSION['is_admin'] 來讓系統記住是否為管理員
    <?php
    require_once 'header.php';
    $_SESSION['is_admin'] = true;

     

三、在樣板中使用 session

  1. Smarty可以用 $smarty.超級全域變數.變數名稱 的方式直接取用超級變數的值,也就是說,只要用 $smarty.session.is_admin 就可以知道是否為管理員
  2. 修改 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>

    看起來像這樣

  3. 修改 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}

    看起來像這樣:

  4. 區塊級別的按鈕用法可以參考:https://bootstrap5.hexschool.com/docs/5.0/components/buttons/#block-buttons


:::

書籍目錄

展開 | 闔起

快速登入


https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1831%26tbsn%3D52

計數器

今天: 4596459645964596
昨天: 2489248924892489
總計: 8026578802657880265788026578802657880265788026578