2012-10-21 52 views
0

用戶登錄後,我希望能夠保存userId以備將來在應用程序中使用。我在應用程序中檢索用戶名的唯一地方是登錄表單,通過登錄控制器。然而,在我的應用程序中的結構是,唯一從登錄控制器傳遞給我的主控制器的是HTML。全局訪問變量

當然,我可以將userId包含在傳回給主控制器的HTML內部的隱藏字段中,但這似乎太過冒險。

那麼,有沒有辦法可以保存一個值(在這種情況下是用戶名),以便它可以從其他類/名稱空間/函數訪問?我已閱讀了一些關於'全球'的內容,但還沒有設法讓它在我的應用程序中工作。

從LoginController.php:

if ($loginView->TriedToLogin()){ 
    $loginUsername = $loginView->GetUserName(); //Retrieved from form 
    $loginPassword = $loginView->GetPassword(); 
} 
+0

尤其是在使用框架時,您的問題聽起來像是您嘗試做一些令人討厭的事情,您應該完全不應該這樣做。 – ThiefMaster

+1

你使用的是什麼框架?這將有一個方法可以讓你訪問這些信息。 – Alex

+0

自制的MVC,所以根本沒有框架。 – holyredbeard

回答

1

登錄後,您需要將用戶令牌存儲在會話中。

參見:http://au1.php.net/manual/en/features.sessions.php

在登錄時儲存用戶:

$_SESSION['user_id'] = 32; // fetch from your user provider 

然後,您可以寫一個類/函數,利用檢查他們的登錄狀態,並在需要時獲取它們的詳細消息。

像這樣:

function getUserId() 
{ 
    return isset($_SESSION['user_id']) ? $_SESSION['user_id'] : false; 
} 

function isLoggedIn() 
{ 
    return isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']); 
} 

然後在你的應用程序的任何地方使用:

echo isLoggedIn() ? getUserId() : 'Anonymous'; 

此外,對於如何構建一個MVC框架,退房 「Create your own framework... on top of the Symfony2 Components」 偉大的信息。

+0

非常感謝! :) – holyredbeard

0

如果只有你想存儲用戶名,我會去與$_SESSION[]

它不是(共享)託管環境中最安全的,但使用存儲的數據很容易在頁面上調用session_start();

+0

您能否詳細說明在使用會話時安全性如何受託管環境的影響? – nickb

+0

@nickb當然。會話通常保存到所有主機帳戶的通用文件夾中, - 每個人都可以訪問它,並授予他們「猜測」session_id的權限。因此,請確保你永遠不會存儲密碼,個人信息等..用戶名或電子郵件,haircolor等是好的..(爲什麼不只是id和檢索什麼需要時,需要嗎?):) – Oliver

+0

如果是這樣的話,那麼你有一個可怕的系統管理員不知道他們在做什麼 - 在我自己的服務器上,在我共享的託管環境中,以及我用過的每個共享主機環境中,我的會話都存儲了在我的域的文件系統的根目錄下(當然不在公共根目錄下),只有我(和管理員)有權訪問。它不在所有用戶中共享。 – nickb