# PHP 基本 Session 操作 ## 官網 https://www.php.net/manual/en/reserved.variables.session.php ### 範例會用到: 1. session_start:啟用一個新的或開啟正在使用中的session,使用此函式前不可以輸出任何東西 2. $_SESSION:存取 session 內容,取用方法是 \$_SESSION["變數名稱"],如果變數名稱沒有先存在SESSION中就先取用,會出現 undefined index 錯誤 3. 用 isset($_SESSION["變數名稱"]) 判斷 SESSION 中是否有該項變數 4. 用 unset($_SESSION["變數名稱"]) 從 SESSION 中移除該項變數 ### 登入範例 ###### 只是範例,所以一切從簡,把前後端煮成義大利麵 XD #### common.php 提供存取登入者資料的方法(使用 Session) ~~~ <?php session_start(); function isLogin() { return isset($_SESSION['user']) && is_a($_SESSION['user'], 'stdClass'); } function setUser($userName) { $user = new stdClass; $user -> name = $userName; $_SESSION['user'] = $user; } function getUser() { return $_SESSION['user']; } function removeUser() { unset($_SESSION['user']); } ?> ~~~ #### index.php 啟始頁面,檢查是否有登入,有登入則直接轉到 member.php ~~~ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php include('common.php'); if (isLogin() == true) { echo '<meta http-equiv=REFRESH CONTENT=1;url=member.php>'; exit(); } ?> </head> <body> <form name="form" method="post" action="login.php"> 帳號:<input type="text" name="id" /> <br> 密碼:<input type="password" name="pw" /> <br> <input type="submit" name="button" value="登入" />&nbsp;&nbsp; </form> </body> </html> ~~~ #### login.php 檢查登入是否成功並進行相對應的轉導頁面 ~~~ <?php include('common.php') ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php $id = $_POST['id']; $pw = $_POST['pw']; if (isLogin() == true) { loginSuccess(); exit(); } //判斷帳號與密碼是否為空白並 if ($id != null && $pw != null && $id == 'user' && $pw == '123') { //將帳號寫入session,方便驗證使用者身份 setUser($id); echo '登入成功!'; loginSuccess(); } else { echo '登入失敗!'; echo '<meta http-equiv=REFRESH CONTENT=1;url=index.php>'; } function loginSuccess() { echo '<meta http-equiv=REFRESH CONTENT=1;url=member.php>'; } ?> </head> </html> ~~~ #### member.php 顯示登入者資訊 ~~~ <?php include('common.php') ?> <html> <head> <?php if (isLogin() == false) { echo '<meta http-equiv=REFRESH CONTENT=1;url=member.php>'; } ?> </head> <body> <form name="form" method="post" action="logout.php"> <div>登入者 <?php echo getUser()->name; ?></div> <input type="submit" name="button" value="登出" /> </form> </body> </html> ~~~ #### logout.php 登出清除 Session ~~~ <?php include('common.php') ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php if (isLogin() == true) { //有登入就砍 SESSION removeUser(); } echo '<meta http-equiv=REFRESH CONTENT=1;url=index.php>'; ?> </head> <body> 登出中... </body> </html> ~~~