02-05-網頁前端設計與開發運用培訓班 === ###### tags: `德鍵` --- 一、整理佈景為離線版 --- 1. 登出 user.php?op=logout ```php case "logout" : $msg = logout(); header("location:index.php");//注意前面不可以有輸出 exit; ``` ```php function logout(){ $_SESSION['admin']=""; } ``` 2. 離線版 templates/user.tpl 3. 調整1 ```html <!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="<{$xoImgUrl}>bootstrap/bootstrap.min.css"> <title>會員管理</title> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="<{$xoImgUrl}>bootstrap/jquery-3.4.1.min.js"></script> <script src="<{$xoImgUrl}>bootstrap/popper.min.js"></script> <script src="<{$xoImgUrl}>bootstrap/bootstrap.min.js"></script> </head> <body> <{if $smarty.session.admin}> <{else}> <style> .form-signin { width: 100%; max-width: 400px; padding: 15px; margin: 0 auto; } </style> <div class="container mt-5"> <form class="form-signin" action="user.php" method="post"> <h1 class="h3 mb-3 font-weight-normal">會員登入</h1> <div class="mb-3"> <label for="name" class="sr-only">帳號</label> <input type="text" name="name" id="name" class="form-control" placeholder="請輸入帳號" required> </div> <div class="mb-3"> <label for="pass" class="sr-only">密碼</label> <input type="password" name="pass" id="pass" class="form-control" placeholder="請輸入密碼" required> </div> <div class="checkbox mb-3"> <label> <input type="checkbox" name="remember" id="remember"> 記住我 </label> </div> <input type="hidden" name="op" id="op" value="login"> <button class="btn btn-lg btn-primary btn-block" type="submit">會員登入</button> <div> 您還沒還沒註冊嗎?請 <a href="#">點選此處註冊您的新帳號</a>。 </div> </form> </div> <{/if}> </body> </html> ``` 4. step2 index.php ```php echo $_SESSION['admin'];die(); ``` 5. step3 建立 templates/tpl 資料夾 => login.tpl login.tpl ```html <style> .form-signin { width: 100%; max-width: 400px; padding: 15px; margin: 0 auto; } </style> <div class="container mt-5"> <form class="form-signin" action="user.php" method="post"> <h1 class="h3 mb-3 font-weight-normal">會員登入</h1> <div class="mb-3"> <label for="name" class="sr-only">帳號</label> <input type="text" name="name" id="name" class="form-control" placeholder="請輸入帳號" required> </div> <div class="mb-3"> <label for="pass" class="sr-only">密碼</label> <input type="password" name="pass" id="pass" class="form-control" placeholder="請輸入密碼" required> </div> <div class="checkbox mb-3"> <label> <input type="checkbox" name="remember" id="remember"> 記住我 </label> </div> <input type="hidden" name="op" id="op" value="login"> <button class="btn btn-lg btn-primary btn-block" type="submit">會員登入</button> <div> 您還沒還沒註冊嗎?請 <a href="#">點選此處註冊您的新帳號</a>。 </div> </form> </div> ``` user.tpl ```html <{include file="tpl/login.tpl"}> ``` 二、製做一個管理員樣板 --- 1. templates/user.tpl ```htmlmixed= <{if $smarty.session.admin}> <{include file="tpl/admin.tpl"}> <{else}> <{include file="tpl/login.tpl"}> <{/if}> ``` 2. templates/tpl/admin.tpl ```htmlmixed= <h1 class="text-center">育將電腦工作室 後台</h1> <div class="container"> <div class="row"> <div class="col-sm-9"> </div> <div class="col-sm-3"> </div> </div> </div> ``` 3. 卡片 ```htmlmixed= <div class="card" style="width: 18rem;"> <div class="card-header"> 管理員 </div> <ul class="list-group list-group-flush"> <li class="list-group-item">首頁</li> <li class="list-group-item">Dapibus ac facilisis in</li> <li class="list-group-item">Vestibulum at eros</li> </ul> </div> ``` 4. 連結 ```htmlmixed= <div class="card" style="width: 18rem;"> <div class="card-header"> 管理員 </div> <ul class="list-group list-group-flush"> <a href="index.php"> <li class="list-group-item">首頁</li> </a> </ul> </div> ``` 5. theme.tpl ```htmlmixed= <{if $smarty.session.admin}> <li class="nav-item"> <a class="nav-link js-scroll-trigger" href="user.php">管理員</a> </li> <li class="nav-item"> <a class="nav-link js-scroll-trigger" href="user.php?op=logout">登出</a> </li> <{else}> <{/if}> ``` 6. 登入 ```htmlmixed= <{if $smarty.session.admin}> <{* 管理員 *}> <li class="nav-item"> <a class="nav-link js-scroll-trigger" href="user.php">管理員</a> </li> <li class="nav-item"> <a class="nav-link js-scroll-trigger" href="user.php?op=logout">登出</a> </li> <{else}> <{* 未登入 *}> <li class="nav-item"> <a class="nav-link js-scroll-trigger" href="user.php">登入</a> </li> <{/if}> ``` 7. 三、利用SESSION、COOKIE製作登入、登出 --- 1. user.php / function login() ```php function login(){ global $smarty; $name="admin"; $pass="111111"; $token="xxxxxx"; if($name == $_POST['name'] and $pass == $_POST['pass']){ $_SESSION['admin'] = true; $_POST['remember'] = isset($_POST['remember']) ? $_POST['remember'] : ""; if($_POST['remember']){ setcookie("name", $name, time()+ 3600 * 24 * 365); setcookie("token", $token, time()+ 3600 * 24 * 365); } header("location:index.php");//注意前面不可以有輸出 }else{ header("location:user.php");//注意前面不可以有輸出 } } ``` 2. user.php / function logout() ```php function logout(){ $_SESSION['admin']=""; setcookie("name", "", time()- 3600 * 24 * 365); setcookie("token", "", time()- 3600 * 24 * 365); } ``` 3. head.php ```php // 為了cookie使用 if(!$_SESSION['admin']){ $_COOKIE['token'] = isset($_COOKIE['token']) ? $_COOKIE['token'] : ""; $_COOKIE['name'] = isset($_COOKIE['name']) ? $_COOKIE['name'] : ""; if($_COOKIE['name'] == "admin" and $_COOKIE['token'] == "xxxxxx"){ $_SESSION['admin'] = true; } } ``` 4. 處理佈景 <{include file=”tpl/login.tpl”}> 管理員:$_SESSION[‘admin’]=true 訪客:$_SESSION[‘admin’]=false smarty => $smarty.session.admin 登出 處理index.php樣板 二、