請推薦font-awesome6的登出、登入圖示
<!-- 登入按鈕 -->
<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>
templates/nav.tpl
,在工具列做判斷,若是還沒登入,就顯示「登入」選項,若已經登入,就顯示「發布新聞」及「登出」選項$smarty.全域變數.變數名稱
」,其中「全域變數」需小寫,「變數名稱」則視原先的大小寫需一致admin.php
,因為只有連到 admin.php
才需要輸入帳密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>
index.php
多加一組流程控制,當 $op
為 logout
時,就去執行登出用的 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;
...略...
}
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');
}