2009-10-14 86 views
2

我想在ASP.NET 3.5中手動實現登錄系統。基本上,在負載情況下,我希望網站檢查並查看用戶對象是否處於活動狀態,如果沒有,則比我希望顯示登錄頁面。ASP.NET:引導用戶登錄頁面,登錄後將用戶發回原來請求的頁面?

用戶登錄成功後,我希望用戶能夠訪問他最初請求的相同頁面。

例如:

  1. 用戶請求:MyPage.aspx - 在
  2. 登錄頁面沒有登錄出現,而不是MyPage.aspx
  3. 用戶登錄成功
  4. MyPage.aspx而是出現Default.aspx例如

對準System.Net命名空間,我看到有一個「HttpWebRequest類」w它有一個「HttpWebRequest.AllowAutoRedirect屬性」,但我不確定這將如何讓我從登錄頁面返回。

注意:我知道ASP.NET中有自動身份驗證系統設置,但我希望對數據庫進行手動控制。

- 託梅克

+0

你對數據庫的手動控制意味着什麼? – 2009-10-14 22:56:19

+0

嗨,我的意思是,如果我在ASP.NET中使用身份驗證方法並將SQL服務器添加到Web.Config文件中,它可以爲您創建用戶數據庫以及他們如何登錄。我從來沒有嘗試過,只是在MSDN上閱讀它。這看起來很棒,但是如果我實現這一點,我不認爲我會學到很多關於安全和登錄的知識。 – 2009-10-14 23:08:54

回答

2

你可以做什麼,如果你不希望真正使用內置的形式Authentcation是:

檢查,如果用戶想從匿名用戶隱藏在每個頁面上進行身份驗證。如果它們未通過身份驗證,請使用查詢字符串中的網址將它們重定向到您的登錄頁面。

if(!HttpContext.Current.User.Identity.IsAuthenticated) { 
    Response.Redirect(~/login.aspx?redirect=this_page.aspx"); 
} 

然後在登錄頁面上,用戶登錄後,檢查查詢字符串以查看是否有重定向參數。

if(!String.IsNullorEmpty(Request.QueryString["redirect"]) { 
    string url = ResolveClientURL(redirect); 
    Response.Redirect(url); 
} 

當然這是所有使用驗證,在那裏你可以拒絕某些目錄的匿名訪問,當你做到這一點,.NET會重定向到登錄頁面(這是在網絡設置內置到.NET .config),並在您的登錄頁面上包含「ReturnURL = blahblah」。

只是一個供參考。

+0

JackM,謝謝。我即將嘗試這一點。我必須將Web.Config文件設置爲除「無」以外的任何類型的身份驗證級別嗎? – 2009-10-14 23:02:36

+0

你打算如何處理驗證?在.NET中,通過調用FormsAuthentication.SetAuthCookie()來完成此操作。 – 2009-10-14 23:06:30

+0

我打算使用會話對象和一個自定義User對象來處理它,如果登錄名通過數據庫比較true,那麼該對象的var將設置爲true。 – 2009-10-14 23:12:33

1

只需保存在會話登錄頁面
上最初請求的URL或隱藏字段登錄成功後,使用Server.Transfer的或Response.Redirect的跳轉到該頁面。

+1

好點。謝謝...順便說一句...你的網站上的旅行的偉大照片!我偷偷從祕魯的幾個山區作爲個人背景圖片。希望你不介意。 – 2009-10-14 23:04:32

0

它看起來像另一種方法描述here。看來你可以使用下面的對象從登錄頁面返回:

FormsAuthentication.RedirectFromLoginPage 

然而,根據這篇文章,更好的方法是用什麼JackM描述,但過載:

Response.Redirect("~/default.aspx", false); 

這樣做可以防止會話在頁面重定向時結束。