我在做網頁伺服器的登入頁面,我是看這個網站寫的https://jam68ty.github.io/BucketTalk/post/php-mysql-login/
基本上只改了username的顯示部分不過應該不影響
我目前遇到的問題是我用登入的網頁(index.php)登入後會跑到"welcome.php",可是我就算不登入直接打網址連到"welcome.php"也可以看到"welcome.php"裡面的內容,請問有辦法可以限制"welcome.php"的讀取嗎?
我目前只試過用username來過濾把不是指定使用者的人弄到"error.php"裡而已,雖然可以擋其他人可是到了"test1.php"就又一樣了,而且如果使用者多還要再手動加也不是辦法
welcome.php
<?php
session_start(); //很重要,可以用的變數存在session裡
$username=$_SESSION["username"];
if($username =="TestUser"){
header("location:test1.php");
exit;
}else{
header("location:error.php");
exit;
}
echo "<h1>你好 ".$username."</h1>";
echo "<a href='logout.php'>登出</a>";
?>
觀察 index.php 最前面幾列
// Check if the user is already logged in, if yes then redirect him to welcome page
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
header("location: welcome.php");
exit; //記得要跳出來,不然會重複轉址過多次
}
這段寫的用途是「如果已經登入,就導向至 welcome.php」
不是「限制 welcome.php 的讀取」
而是「在 welcome.php 一開始判斷是否已登入
,如果沒登入你要導向去那裡(eg.login.php)」
講白了就是在所有你想限制讀取的 php 的最前面,都加上是否已登入的判斷以及未登入的處理
另外
先前的問題如果已經解決
請選個最有幫助解答以結案
這討論下去會變成框架設計了
如果先不管進階的用法
簡單的方式可以考慮這樣做:
require('startup.php');
PS. 作為 library 的檔案不 require('startup.php');
,使用者雖然能請求這個 library 的 url,但只會看到空白頁面。
(以上是不動伺服器設定,新手可以用的方式)
就現今框架而言。其登入判斷會主要寫到共用的「控制器」上。
不過依你的情況是屬於無物件導向及框架。
那一般的做法是先建立一個能共用的PHP。
然後再每一支程式的開頭都先 require 或 include 處理。
其最好是建立在可做為控制器的PHP檔。而不是每一支都要。
像 淺水員
教你的那樣就是如上同樣的理念寫法。
但一般還是會建議使用物件導向的方式來處理。
如有心要進入這個世界,還是學一下框架。
你會發現更高階層的應用處理方式。