2009-10-20 100 views
2

如何防止用戶在未登錄時訪問頁面?我希望他被重定向到登錄頁面。我知道這與會議有關。PHP,防止用戶在未登錄的情況下訪問頁面?

+0

您如何知道用戶是否活動?正在設置哪些變量? – Sam152 2009-10-20 12:33:10

+0

如果還沒有實現,還有1個提示:在檢查用戶會話是否存在之後,檢查POST變量是否來自請求而不是直接訪問。目的是防止公衆直接訪問你的PHP頁面(如果它們以某種方式窺見它)並且執行不合需要的功能。 – 2017-01-03 07:55:00

回答

6

它的工作原理是這樣的:

  1. 啓動一個會話:在session_start()
  2. 如果會話[ 「user」] == null,重定向到登錄頁面,否則繼續。
  3. 在登錄頁面,使用表格
  4. 張貼這種形式登錄頁面
  5. 覈對您的身份驗證服務(如MySQL中的表),如果用戶被授權
  6. 如果要求用戶輸入密碼是的,Session [「user」] = $ userName,將用戶重定向到頁面。如果不是,再次提示輸入密碼

當然,這是非常非常簡單的。在你的會話中,你可以保留一個複雜的用戶對象,或任何東西。祝好運編碼。

+0

如果你想爲任何用戶做某個URL,那麼該怎麼辦?如果他們登錄或沒有。 – 2016-09-01 21:21:17

8

當他登錄時 - 存儲會話變量。然後在每一頁

session_start(); 
if (!isset($_SESSION['nID'])) 
    header("Location: login.php"); 

的開始。如果登錄就可以了

session_start(); 
$_SESSION['nID'] = 1; //example 
+0

不起作用;精明的用戶可以忽略重定向。 – Vitruvius 2017-07-21 23:20:13

8

由於Svetlozar安格洛夫指出,下面的代碼將工作做好:

if (!isset($_SESSION['nID'])) 
    header("Location: login.php"); 

但是..這不會對實際誰真的想接入用戶安全的頁面。你需要做一些調整:

if (!isset($_SESSION['nID'])) 
{ 
    header("Location: login.php"); 
    die(); 
} 

這可以防止殭屍,誰知道如何從進入頁面,造成的問題忽略瀏覽器的標題薩維用戶。它還允許頁面停止執行頁面的其餘部分並節省資源。

它還值得注意的是$ _SESSION ['nID']可以換出任何其他變量,你正在用來存儲用戶名或ID的。

1

遵循以下步驟:

創建的login.php頁面所有人開放,其中用戶輸入她的用戶名和密碼的形式。這個表格必須提交給login.php本身。 (動作= '的login.php')。在表單中還包含一個隱藏變量,用於跟蹤表單是否已提交。

如果設置了隱藏變量,請檢查數據庫中是否存在用戶名($_POST['user']),並確認密碼與用戶名匹配。如果是這樣,存儲用戶名在這樣的$ _SESSION變量:

$_SESSION['username'] = $_POST['user'];

如果沒有,請重新登錄。PHP的是這樣的:

echo 'header("login.php")'; //You should not have echoed anything before this

現在包括在您創建的每個用戶頁面的login.php。假設你正在寫的電子郵件應用程序,這樣

include ("login.php")

創建inbox.php現在,如果會話變量「用戶」設置的login.php將檢查並允許訪問只有授權用戶。

相關問題