:::

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

一、關於 session

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

二、啟用 session

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

     

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

     

三、在樣板中使用 session

  1. Smarty可以用 $smarty.超級全域變數.變數名稱 的方式直接取用超級變數的值,也就是說,只要用 $smarty.session.is_admin 就可以知道是否為管理員
  2. 但是若還未登入時,就要樣板去取用 $smarty.session.is_admin 會因為該session不存在而出現錯誤
  3. 所以,我們在 header.php 統一送出 $is_admin 的值
    // 是否為管理員
    $is_admin = isset($_SESSION['is_admin']) ? $_SESSION['is_admin'] : false;
    $smarty->assign('is_admin', $is_admin);
    

     

  4. 修改 templates/op_show.tpl,在文章下方加入返回(javascript:history.back())、修改(/admin/index.php?op=edit&id=編號)、刪除(/admin/index.php?op=destroy&id=編號)等按鈕
    <div class="row">
      <div class="col-md-9">
        <h3>{$news.title}</h3>
        <p class="text-muted">{$news.info}</p>
        <article>
          {$news.content|nl2br}
        </article>
    
        <!-- 工具列 -->
        <div class="mt-5">
          <a href="javascript:history.back()" class="btn btn-outline-primary">
            <i class="fas fa-undo-alt"></i>返回
          </a>
          {if $is_admin}
            <a href="{$url}/admin/index.php?op=edit&id={$news.id}" class="btn btn-outline-warning">
              <i class="fas fa-pencil-alt"></i>修改
            </a>
            <a href="{$url}/admin/index.php?op=destroy&id={$news.id}" class="btn btn-outline-danger">
              <i class="fas fa-trash-alt"></i>刪除
            </a>
          {/if}
        </div>
      </div>
      <div class="col-md-3">
        <!-- 縮圖列表 -->
        ...略...
      </div>
    </div>

     

  5. 修改 templates/aside.tpl,在年度列表下方加入新增文章(/admin/index.php)按鈕:
    ...略...
    
    {if $is_admin}
      <div class="d-grid gap-2 mt-3">
        <a href="{$url}/admin/index.php" class="btn btn-primary">
          <i class="fas fa-pencil-alt"></i> 新增文章
        </a>
      </div>
    {/if}

    看起來像這樣:

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


:::

書籍目錄

展開 | 闔起

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

計數器

今天: 4209420942094209
昨天: 5069506950695069
總計: 5134657513465751346575134657513465751346575134657