Trong file web.config có đoạn sau :
<authentication mode="Forms" />
Có 4 mode xác thực người dùng trong asp.net đó là
- None
- Forms
- Windows
- Passport.
Trong các dạng này :
- Windows có nghĩa là bạn đăng nhập với user nào để vào windowxp thì chính user đó sẽ là user hiện tại
- passport : dành cho single sign on (SSO) cái này chưa tìm hiểu kỹ
- None : chẳng cần đăng nhập làm gì cho mệt, có viết file đăng nhập login.aspx thì hệ thống nó cũng chẳng chạy.
- Chúng ta chỉ cần chú ý dạng Forms : có nghĩa là sử dụng form đăng nhập do chúng ta viết để xác thực người dùng.
Một form đăng nhập thông thường bao gồm các thông tin cơ bản sau:
- username
- mật khẩu
- nhớ mật khẩu (checkbox)
- đăng ký nếu chưa có tài khoản
- quên mật khẩu.
Để đăng ký rằng người dùng có username = 'aspnet' đang đăng nhập hệ thống chúng ta dùng câu lệnh sau
System.Web.Security.FormsAuthentication.SetAuthCookie(dt.Rows[0]["UserName"].ToString(), persist);
Cái persist là biến bool, nếu là true thì hệ thống nó sẽ tự nhớ username và mật khẩu của lần trước để tự động đăng nhập, còn nếu là false thì nó sẽ không nhớ mật khẩu đâu.
1. Cái FormsAuthentication thực chất nó làm 1 việc tương đối đơn giản là ghi vào 1 cái cookie có tên là ".ASPXAUTH" (chú ý là có dấu chấm) cái credital này được mã hóa kiểu quái quỷ gì đó mà khi decrypt (giải mã) ngược trở lại nó sẽ cho ta cái username. Mỗi lần nó mã hóa ra một đoạn mã khác nhau nhưng lần nào decrypt cũng ra cái tên 'aspnet'
2. Và tiếp theo nó làm việc là ghi vào ServerVariables["AUTH_USER"] giá trị 'aspnet'.
Như thế để lấy ra user hiện tại chúng ta chỉ cần dùng mỗi lệnh này là ngon.
return HttpContext.Current.Request.ServerVariables["AUTH_USER"];
Ngoài ra chúng ta còn có thể dùng các cách lởm khác :
return HttpContext.Current.User.Identity.Name;
nhưng cách này lỗi hơn nhiều.