2010-05-07 96 views
0

我正在構建一個會員網站...我剛剛通過登錄頁面,我現在可以登錄和註銷。但是,這並不能保護我的所有頁面。我該如何解決這個問題? 我想在瀏覽器未登錄時設置它,打開的頁面會顯示「登錄第一個blah3x」...任何幫助pls ??? :-(如何讓頁面知道瀏覽器是否已登錄?

回答

3

我想,當用戶登錄,創建一個會話對象和存儲的一些信息在裏面。一些東西,識別用戶。

$_SESSION['User']['logged_in'] = true; 

然後,在我的頁面的頂部,我倒是可能扔在一個檢查。

if(!isset($_SESSION['User']['logged_in']){ 
    header('Location: login.php'); 
} 

這將重定向未登錄任何人,你的登錄頁面。請想想如何更好地保護您的應用程序,因爲這是非常簡陋並不會真的適用於任何生產環境ronments。

+0

我試過這個,但頁面似乎並不知道會話是否已經開始...... :( – Joann 2010-05-08 08:39:49

+0

在@session_start()中拋出;在頁面的頂部,這將開始一個新的會話如果不存在,請確保在所有頁面中包含會話開始,以便它可以持續 – 2010-05-10 08:15:44

1

您需要做的下一件事是建立您的訪問控制列表(ACL)。該列表可能是僅在經過身份驗證時才能查看的頁面列表。接下來的事情是通過SESSION或COOKIE持久化身份驗證令牌(可能是用戶名),然後查找您的ACL,如果當前用戶請求的頁面需要身份驗證然後將其路由到某個位置,則可能是主頁(如果它在列表中)。您的ACL可以存儲到數據庫,SESSION或COOKIE。確保o加密保存在COOKIE上的所有信息。

以下面的例子。您可以簡單地將它作爲包含文件添加到每個頁面的頂部。

<?php 
//this could be acl.php 
//this could be saved to $_SESSION, $_COOKIE or database 
$acl = array("members"=> 1, 
      "comment"=> 1); 

//assuming that you have saved the username authenticated into a $_SESSION for persistence 
if (!isset($_SESSION["username"]) && isset($acl[$page]) { 
    //user is not logged in 
    die("Please log-in"); 
} 
?> 

使用範例,

<?php 
//this could members.php 
$page = "members"; //or you can leverage $_SERVER["SCRIPT_NAME"] to get the pagename automatically 
include_once("acl.php"); 
?> 

在訪問控制列表的更高級的用法,源經常使用的角色或用戶自己來定義它。當你將它加載到頁面時,它總是用戶特定的。

相關問題