2009-01-25 24 views
6

Tôi đang làm việc với dự án trang web asp.net rằng một số trang cần xác thực. Tôi đang sử dụng thành viên asp.net.cách tốt nhất để làm cho một số trang trong asp.net yêu cầu đăng nhập là gì?

Tôi đã đọc một số câu trả lời. ví dụ. tạo tất cả các trang đó trong thư mục và tạo web.config bên trong mô tả đặc quyền. Đây là một cách giải quyết vấn đề nhưng tôi cần cách khắc phục và hiệu quả hơn.

+0

Bạn có ý nghĩa gì bởi 'có thể sửa chữa và hiệu quả hơn'? Có gì sai với phương pháp bạn đã phác thảo ở trên? –

+1

Tôi cho rằng ecleel có nghĩa là "linh hoạt" khi tôi trả lời dưới đây - sử dụng Web.Configs có thể là một nỗi đau nếu bạn đang làm điều này với các trang động hoặc dựa trên ngày một trang được đăng ví dụ (tức là hạn chế quyền truy cập vào các trang lưu trữ) –

Trả lời

20

Nếu bạn không muốn mã hóa cứng trong web.config (s), bạn sẽ cần phải thực hiện điều khiển kiểu "Trang cơ sở".

Lớp trang cơ sở của bạn phải được kế thừa từ System.Web.UI.Page và cần có phương thức bạn có thể gọi để nói "Người dùng phải đăng nhập" hoặc "Người dùng phải ở trong vai trò x" và nếu người dùng không có vai trò đó, chuyển hướng đến trang đăng nhập (bạn có thể nhận được điều này bằng cách gọi FormsAuthentication.LoginUrl).

Các trang thực sự của bạn phải được kế thừa từ lớp này thay vì trực tiếp từ System.Web.UI.Page. Sau đó, trong một cái gì đó giống như Init, hoặc ở đầu Page_Load, gọi

base.UserMustBeLoggedIn(); 

hoặc

// Replace "AccessRole" with the name of your role 
base.UserMustBeInRole("AccessRole"); 

Và hãy trang cơ sở xử lý này.

Nếu bạn muốn có quyền truy cập được lưu trữ trong cơ sở dữ liệu, bạn có thể di chuyển tất cả việc xử lý sang trang cơ sở và ở một nơi thích hợp trong vòng đời của trang, kiểm tra URL hiện tại với bảng cơ sở dữ liệu của bạn vai trò/xác thực người dùng đối với các yêu cầu và chuyển hướng theo yêu cầu.


Lưu ý rằng bạn có thể tạo an ninh cấp độ trang trong cấu hình web như vậy:

<configuration> 
    <location path="LockedPage.aspx"> 
    <system.web> 
     <authorization> 
     <!-- Deny access to anonymous users --> 
     <deny users="?"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

Xem thêm thông tin có sẵn trên MSDN: The Location ElementThe Authorization Element.

3

Bạn có thể thử mã này, Trong trường hợp tải chủ trang viết mã này, thêm một tài sản

public bool m_bLoginRequired = true;

public bool IsLoginRequired 
{ 
    get { return m_bLoginRequired; } 
    set { m_bLoginRequired = value; } 
} 



try 
     { 
      // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache); 
      Response.Cache.SetNoStore(); 
      if (IsLoginRequired==true) 
      { 
        if (Session.IsNewSession || HttpContext.Current.Session["Username"] == null) 
        { 
         FormsAuthentication.SignOut(); 
         FormsAuthentication.RedirectToLoginPage("Session Expired"); 
         Response.End(); 
        } 
       } 
      } 
     catch (Exception ex) 
     { 
      throw (ex); 
     } 

bây giờ trong trang Login bạn cần phải viết mã này

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR"); 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); 
      cookie.Name = "jay"; 
      Session["UserName"] = txt_UserName.Text.Trim(); 
      Response.Cookies.Add(cookie); 
      txt_UserName.Text = ""; 
      txt_Password.Text = ""; 
      Response.Redirect("HomePage2.aspx"); 

bây giờ bạn ave để thêm sự kiện pageinit trong trang đăng nhập

protected void Page_PreInit(object sender, EventArgs e) 
    { 
     Master.IsLoginRequired = false; 
    } 

nếu bạn muốn người dùng có thể truy cập một trang chưa được ủy quyền sau đó trong sự kiện pageinit của trang đó

đặt Master.IsLoginRequired=false;

cũng chỉ định thông tin đăng nhập trong tệp web.config.

Các vấn đề liên quan