2013-03-20 67 views
1

我正在爲學校製作項目。我在ASP.Net中編寫了一個網站,我只是做了一個簡單的登錄系統。當用戶輸入電子郵件和密碼時,我查詢數據庫並確保它們有效。ASP.NET登錄後,其他連接都已登錄

在這一點上,我想知道誰登錄,所以我有一個名爲User.cs的類來跟蹤登錄的人。

public class User 
{ 
    static public bool loggedIn = false; 
    static public int userType = -1;//1 = Agent, 2 = Buyer/Renter 
    static public int id = -1;//the id of the user 
} 

例如內部User.cs,有一種叫做bool loggedIn變量。在登錄按鈕點擊後,我將它設置爲true,這樣在Page_Load()期間,我可以使登錄/註冊按鈕在需要時不可見。我使用IIS部署了該網站,並通過從計算機登錄進行測試,效果很好。然後我從另一臺計算機上登錄,並且從第一次登錄時,我仍然以最後一位用戶的身份登錄。我退出後,我從所有其他計算機上退出,並從該計算機打開網站。

所以最後,我不知道如何做出正確的登錄系統。

回答

0

好的,所以你遇到的第一個問題是登錄的用戶信息是static。它可用於所有實例因此。因此,當您登錄時,那是登錄的用戶無處不在,並且當您註銷時,您已註銷無處不在。

那麼,讓我們修正了User類應我們:

public class User 
{ 
    public bool loggedIn = false; 
    public int userType = -1;//1 = Agent, 2 = Buyer/Renter 
    public int id = -1;//the id of the user 
} 

,我們繼續,將修復登錄的用戶將其實例的跨度。但是我們還沒有完成,我們需要將這些信息存儲在某個地方,以便您可以在後期等方式上恢復它。讓我們使用Session,這是有道理的,因爲他們登錄了會話對不對?當你想獲取該用戶可以拉出來的Session

var usr = new User 
{ 
    loggedIn = true, 
    userType = ?, // pull this value from the database 
    id = ?   // pull this value from the database 
}; 
Session["User"] = usr; 

現在:

var usr = Session["User"] as User; 
// if usr is null then there is no logged in user 
// otherwise, if it's NOT null there is a logged in user for this session 
+0

非常感謝您的回答。因此,當logIntButton_Click發生在logInPage.Master.cs中時,我創建了一個包含非靜態變量的User對象,然後將此新的User對象實例放入Session中。在此loginButton_Click之後,我將用戶重定向到HomePage.aspx。 HomePage.Master.cs的Page_Load()函數我需要訪問會話並查看是否有登錄用戶,以便我可以決定顯示「創建列表」按鈕。但是現在會話必須是全局變量?這不會造成同樣的問題嗎? – 2013-03-20 19:56:11

+0

@Yunus,根據定義,會話不是一個全局變量,它實際上是一個特殊的字典,當用戶通過瀏覽器訪問您的網站時,該會話在IIS上創建。該會話基於Cookie,IP地址和其他機制進行管理和加載。 – 2013-03-20 20:01:53

+0

這很有趣,我不知道。我認爲會議是我必須寫的另一課。感謝您的幫助! – 2013-03-20 23:59:03

0

第一種方法:等Page_Load,當您驗證用戶,做到這一點也當用戶點擊註銷,然後用戶類中的loggedIn變量再次變爲false。

但正確的方法是,在後端數據庫中,您必須在用戶表中添加一個名爲「IsLoggedIn」的新列。它的默認值爲0爲false,當用戶登錄時,請將其設置爲true。因此,您可以輕鬆跟蹤誰在線或不在線。