2013-08-06 34 views
8

Tôi nhận ra rằng câu hỏi này có thể đã được hỏi trước đây, nhưng tôi không thể tìm thấy bất cứ điều gì phù hợp với tình hình của tôi một cách chính xác."Remember Me" với các trang web asp.net

Tôi đã tạo trang web bằng cách sử dụng trình trợ giúp WebMail trong các trang web ASP.Net (không phải là biểu mẫu web) và WebMatrix. Người dùng được yêu cầu đăng nhập vào trang web và có hộp "Nhớ thông tin đăng nhập của tôi" (theo lý thuyết) sẽ giữ cho người dùng đăng nhập cho đến khi họ chọn đăng xuất. Trang web không cho phép người dùng đăng nhập nếu họ đóng trình duyệt và mở lại trong vòng 20-30 phút. Tuy nhiên, sau 20-30 phút không truy cập trang web, người dùng đã đăng xuất. (Như một sang một bên, vấn đề này dường như tồn tại ngay cả với mẫu WebMatrix "Starter Site".)

Tôi đã thử nhiều giải pháp, nhiều giải pháp đã được đăng trên Stack Overflow, nhưng không có gì có hiệu quả.

+0

gì nhiều giải pháp 'Bạn đã thử? Sẽ giúp đỡ để biết vì vậy chúng tôi không lặp lại chúng. – Artless

+0

Thật không may, tôi đã không lưu các nỗ lực không hoạt động, vì vậy tôi không thể cho bạn biết chính xác những gì tôi đã thử. Hầu hết có liên quan cố gắng tạo cookie có thể được truy cập bởi trang web của tôi, nhưng tôi không chắc liệu tôi đã tạo đúng cookie hay cố gắng truy cập vào nó đúng. – CarolK

+0

Tôi hy vọng rằng một nơi nào đó trong mẫu mã đó, có một điều kiện, kiểm tra thời gian không hoạt động phiên hiện tại. Xem qua mã xác thực và xem liệu có kiểm tra thời gian hay gì đó tương tự không. – ZorleQ

Trả lời

10

EDIT 2

Các cookie được sử dụng bởi hình thức xác thực được gọi là ".ASPXAUTH" và theo mặc định sẽ hết hạn sau 30 phút.

Đi tới web.config của bạn và tìm phần tử authentication. Bạn có thể thiết lập thời gian hết hạn của cookie (tính theo phút) ở đó, như ví dụ:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" 
       name="myCookie"     <!-- optional, if you want to rename it --> 
       timeout="2880" />    <!-- expires in 48 hours --> 
    </authentication> 
</system.web> 

HOẶC

Nếu cấu hình không bạn, hãy thử bài viết này: Link

bạn' sẽ cần phải xóa bất kỳ vé auth hiện có và tạo một tùy chỉnh của bạn. Nó nắm để đoạn mã này bạn cần phải thực hiện nếu người dùng chọn remember me tùy chọn:

if (rememberMe) 
    { 
     // Clear any other tickets that are already in the response 
     Response.Cookies.Clear(); 

     // Set the new expiry date - to thirty days from now 
     DateTime expiryDate = DateTime.Now.AddDays(30); 

     // Create a new forms auth ticket 
     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, loginModel.UserName, DateTime.Now, expiryDate, true, String.Empty); 

     // Encrypt the ticket 
     string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

     // Create a new authentication cookie - and set its expiration date 
     HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
     authenticationCookie.Expires = ticket.Expiration; 

     // Add the cookie to the response. 
     Response.Cookies.Add(authenticationCookie); 
    } 
+1

Đúng vậy nhưng, một số lưu trữ, không cho phép cài đặt thời gian chờ và thậm chí bằng cách đặt cấu hình được ghi đè. – PiLHA

+0

Suy nghĩ thứ hai, đặt thời gian chờ của phiên sẽ không phải là giải pháp tốt. Cookie của anh ấy chỉ đơn giản là hết thời gian, vì vậy giải pháp chính xác sẽ là đặt thời gian hết hạn khi người dùng đăng nhập. Cập nhật câu trả lời. – Artless

+0

Vì vậy, Trickery, mã được hiển thị ở trên phản ánh sự điều chỉnh? – CarolK

-1

Bạn có thể tự tạo một cookie (không bao giờ hết hạn) có chứa một GUID được ánh xạ tới người dùng của bạn. Khi người dùng truy cập trang đăng nhập của người dùng, bạn có thể đọc cookie đó và kiểm tra hướng dẫn và xác thực người dùng. kiểm tra các liên kết

http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/78c837bd(v=vs.100).aspx

http://www.codeproject.com/Articles/31914/Beginner-s-Guide-To-ASP-NET-Cookies

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