:::

8-2 製作登入、登出功能

  1. 有了登入認證機制,遍可以製作登入及登出機制
  2. 首先,懶惰的我一樣可以先問AI,登入登出圖示用什麼好(因為我懶得查)
    請推薦font-awesome6的登出、登入圖示

     

  3. AI非常熱心的幫了我的忙
    <!-- 登入按鈕 -->
    <a href="login.php" class="btn btn-primary">
        <i class="fas fa-right-to-bracket"></i> 登入
    </a>
    
    <!-- 登出按鈕 -->
    <a href="logout.php" class="btn btn-secondary">
        <i class="fas fa-right-from-bracket"></i> 登出
    </a>
    

     

  4. 我們先修改 templates/nav.tpl,在工具列做判斷,若是還沒登入,就顯示「登入」選項,若已經登入,就顯示「發布新聞」及「登出」選項
  5. 在樣板中要直接使用全域變數,可以用「$smarty.全域變數.變數名稱」,其中「全域變數」需小寫,「變數名稱」則視原先的大小寫需一致
  6. 「登入」及「發布新聞」其實都是連結到 admin.php,因為只有連到 admin.php 才需要輸入帳密
  7. 「登出」則連結到 index.php?op=logout,等一下我們就必須去 index.php 多加一組流程控制
    <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        ...略...
        {if isset($smarty.session.is_admin) && $smarty.session.is_admin}
            <li class="nav-item">
                <a class="nav-link" href="admin.php">
                    <i class="fas fa-newspaper me-1"></i>發布新聞
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="index.php?op=logout">
                    <i class="fas fa-right-from-bracket me-1"></i>登出
                </a>
            </li>
        {else}
            <li class="nav-item">
                <a class="nav-link" href="admin.php">
                    <i class="fas fa-right-to-bracket me-1"></i>登入
                </a>
            </li>
        {/if}
    </ul>

     

  8. 修改 index.php 多加一組流程控制,當 $oplogout 時,就去執行登出用的 logout_admin() 函數,登出後轉向至首頁。
    <?php
    require 'header.php';
    
    // 過濾外部傳來變數
    $op = filter_input_var('op');
    $id = filter_input_var('id', 'int');
    $start = filter_input_var('start', 'int', 0);
    
    switch ($op) {
    
        case 'logout':
            logout_admin();
            header("location: index.php");
            exit;
    
            ...略...
    }

     

  9. 微調一下 function.php logout_admin() 函數,將最後的 exit 刪除,避免無法轉向。
    function logout_admin()
    {
        // 清除 session
        unset($_SESSION['is_admin']);
        unset($_SESSION['admin_username']);
        session_destroy();
    
        // 清除 HTTP 認證
        header('WWW-Authenticate: Basic realm="Restricted Area"');
        header('HTTP/1.0 401 Unauthorized');
    }
    

     

  10. 如此,工具列就會隨著登出登入狀態不同,而有所改變

:::

書籍目錄

展開 | 闔起

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

計數器

今天: 1085108510851085
昨天: 2027202720272027
總計: 7972126797212679721267972126797212679721267972126