2012-07-15 58 views
0

我有一個登錄頁面,當用戶被重定向到他在登錄後,一個全球性的頁面。如果用戶登錄或不登錄,使用會話保護要訪問的Web文件。有用還是不?

我需要知道,如果這是爲了保護一些網頁文件被訪問的好方法,如果用戶沒有登錄在

global.aspx代碼(受保護的頁面,在那裏他登錄後,用戶被重定向)

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["Login"] != null) 
     { 
      if (Session["Login"].Equals("Logged")) 
      { 
       userName.Text = (string)Session["UserTest"].ToString(); 
      } 
     } 
     else 
      Response.Redirect("http://localhost:port/Login.aspx"); 
    } 

登錄頁面代碼:

Session["Login"] = "Logged"; 
Session["UserTest"] = "Test123"; 
Response.Redirect("http://localhost:port/Global.aspx"); 

謝謝

回答

2

我想你應該閱讀關於forms authentication。但關於它的another article。你寫的代碼看起來很好,但是我的上帝,你正在重新發明輪子。

形式的認證的想法是,在當前認證的用戶名存儲在加密的cookie(除非另外定義)和沿每個請求一起發送。表單身份驗證模塊一旦激活,就會檢查每個請求中是否存在此cookie,並自動指定User屬性以使其可用於所有頁面。如果有人嘗試訪問受保護的頁面,該模塊只會將其重定向到登錄頁面,該頁面在web.config中配置。另一方面,web.config中的<location>元素允許您指定應用程序的哪些頁面/文件夾需要驗證。

所以一旦你激活窗體身份驗證,則您的受保護的頁面可能看起來像:

protected void Page_Load(object sender, EventArgs e) 
{ 
    userName.Text = User.Identity.Name; 
} 

而且Login頁面(這不應該被保護):

public void Login_Click(object sender, EventArgs e) 
{ 
    if (Membership.ValidateUser(userName.Text, password.Text)) 
    { 
     FormsAuthentication.RedirectFromLoginPage(username.Text, false) 
    } 
    else 
    { 
     errorLabel.Text = "Invalid credentials"; 
    } 
} 

你也可以結帳Login control可以進一步簡化這一點。

+0

不,我更喜歡'硬編碼',我會嘗試表單認證,感謝您的幫助。 (需要接受你的答案之前等待)的 – Jax 2012-07-15 19:47:58

+0

好,而不是使用'Membership.ValidateUser(userName.Text,password.Text)'你可以硬編碼:'如果(userName.Text == 「富」 && password.Text == 「巴」)'。或者,如果您不想驗證任何憑據,只需在沒有任何條件的情況下調用FormsAuthentication.RedirectFromLoginPage(「Test123」,false)方法。這將通過發出相應的認證cookie來自動授權'Test123'用戶。 – 2012-07-15 19:52:09

+0

現在我配置web.config,如果出現問題,我會回覆評論,希望你能幫助我 – Jax 2012-07-15 19:53:54

相關問題