2009-08-17 28 views
8

HILàm cách nào để Giữ người dùng đăng nhập trong 2 tuần?

Tôi đang sử dụng asp.net mvc với tư cách thành viên asp.net.

Tôi muốn có hộp kiểm nếu được nhấp giữ người dùng đăng nhập trong 2 tuần (trừ khi họ xóa cookie của họ).

Vì vậy, tôi biết họ là

FormsAuthentication.SetAuthCookie (userName, createPersistentCookie)

nhưng tôi không biết làm thế nào để thiết lập nó để duy trì 2week.

Tôi đã viết lại hầu hết các nội dung thành viên. Vì vậy, tôi không sử dụng các công cụ như Create() và VerifyUser().

+0

Bạn đã đánh dấu câu trả lời là câu trả lời được chấp nhận? –

Trả lời

4

Bạn có thể đặt thời gian chờ của phiên toàn cầu (giá trị bằng phút) trong ví dụ web.config.

<system.web> 
    <authentication mode="Forms"> 
      <forms timeout="20160"/> 
    </authentication> 
</system.web> 

Điều này sẽ dành cho tất cả người dùng được xác thực. Nếu bạn muốn sử dụng chức năng 'Nhớ tôi' thì bạn sẽ cần phải viết mã của riêng bạn để đặt cookie/vé. Một cái gì đó như thế này (chụp from here):

protected void Page_Load() 
{ 
    if (Request.Cookies["username"] == null || Request.Cookies["username"].Value.ToString().Trim() == "") 
    { 
     Login1.RememberMeSet = true; 
    } 
    else 
    { 
     Login1.UserName = Request.Cookies["username"].Value.ToString().Trim(); 
     Login1.RememberMeSet = true; 
    } 
} 
protected void RememberUserLogin() 
{ 
    // Check the remember option for login 

    if (Login1.RememberMeSet == true) 
    { 
     HttpCookie cookie = new HttpCookie("username"); 
     cookie.Value = Login1.UserName.Trim(); 
     cookie.Expires = DateTime.Now.AddHours(2); 

     HttpContext.Current.Response.AppendCookie(cookie); 
     Login1.RememberMeSet = true; 

    } 
    else if (Login1.RememberMeSet == false) 
    { 
     HttpContext.Current.Response.Cookies.Remove("username"); 
     Response.Cookies["username"].Expires = DateTime.Now; 
     Login1.RememberMeSet = false; 
    } 

} 
+1

nhưng làm cách nào nếu họ không chọn hộp? mọi người sẽ không nhận được cài đặt đó? – chobo2

+0

Vâng, xin lỗi, tôi đã hiểu sai câu hỏi của bạn - Tôi sẽ cập nhật câu trả lời của tôi để giải quyết câu hỏi cụ thể của bạn ... –

+0

Tôi nghĩ rằng nếu tôi chỉ thiết lập những thứ như bạn có trong web.config nhưng vô hiệu hóa trượt hết hạn thì tôi sẽ nhận được những gì tôi muốn. – chobo2

16

Thêm khóa băm hoặc chuỗi ngẫu nhiên vào cả cookie và cơ sở dữ liệu (cả khóa giống nhau). Nếu giá trị cookie và cơ sở dữ liệu giống nhau, khi người dùng bắt đầu một phiên mới, hãy đăng nhập lại họ. Khi người dùng đạt đến hai tuần, hãy xóa khóa bí mật khỏi cơ sở dữ liệu bằng cách sử dụng tác vụ cronjob (Unix) hoặc được lập biểu (Windows).

Cảnh báo: Không dựa vào ngày hết hạn cookie vì mọi người có thể hack trình duyệt của họ.
Quy tắc: KHÔNG BAO GIỜ, EVER tin tưởng BẤT K of người dùng của bạn!

+0

Bạn có thể giải thích cách băm của chuỗi ngẫu nhiên tăng tính bảo mật của giải pháp của bạn không? Nếu băm của chuỗi ngẫu nhiên được lưu trữ trong cả cơ sở dữ liệu và cookie, thì điều này về cơ bản không giống như lưu trữ chuỗi ngẫu nhiên trong cả cơ sở dữ liệu và cookie? – rinogo

+0

Tôi đang sử dụng khóa băm và chuỗi ngẫu nhiên theo từ đồng nghĩa. –

2

Chỉ cần sử dụng cookie đơn giản với ngày hết hạn 2 tuần.

+2

Bằng cách đơn giản nhất - nhưng cũng dễ nhất để hack. –

+0

Điểm nhỏ, nhưng đó không phải là cookie "phiên" nếu có ngày hết hạn được đặt. Đó là một cookie "vĩnh viễn". – MrWhite

+0

@ w3d đã đồng ý. Đã sửa số –

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