2013-02-22 42 views
5

Tôi đã tìm kiếm nhưng tôi không tìm thấy bất kỳ câu trả lời cụ thể nào cho câu hỏi này. Làm thế nào tôi có thể nhận được giá trị trong máy chủ bao nhiêu thời gian còn lại, trước khi phiên hết hạn? Cài đặt phiên của tôi:Thời gian chờ của phiên .NET

// thời gian chờ ví dụ 10 phút.

<authentication mode="Forms"> <forms name=".ASPXAUTH_External" loginUrl="Authentication/Unauthorized.aspx" protection="All" timeout="10" path="/" slidingExpiration="true" defaultUrl="~/Pages/home.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/> 
</authentication> 
<sessionState mode="InProc" timeout="10"> 
</sessionState> 

tôi nhận được giá trị ban đầu (nó sẽ nhận được 10 * 60 = 600 giây):

SessionStateSection sessionSection = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState"); 
countdown.Text = sessionSection.Timeout.TotalSeconds.ToString(); 

Nhưng khi thời gian phiên trái ít hơn một nửa và người sử dụng thực hiện một số hành động. Tôi nhận được giá trị ban đầu 600, nhưng nó không bằng nhau cho thời gian phiên trái, bởi vì "slidingExpiration" thêm thời gian (Tôi không biết bao nhiêu), nhưng không đặt lại phiên thời gian còn lại để bắt đầu 10 phút.

Làm cách nào để có thời gian phiên còn lại cho đến khi hết hạn?

Trả lời

2

tôi thấy rằng thời gian của phiên hết hạn tôi có thể nhận như vậy:

DateTime dateNow = DateTime.Now; 
if (HttpContext.Current.User.Identity is FormsIdentity) 
{ 
    HttpCookie authCookie = this.Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
    double leftSeconds = (authTicket.Expiration - dateNow).TotalSeconds; 
    // Control in MasterPage, where I setting value ant then taking for JavaSript to CountDown message 
    countdown.Text = leftSeconds > 0 ? leftSeconds.ToString() : "0"; 
} 
0

Nếu bạn là phía máy chủ, nó được đặt lại (trên bất kỳ postback nào), vì vậy nếu bạn có 10 phút, đó là 10 phút. Clientside bạn có thể đặt hẹn giờ sau chuyến đi cuối cùng đến máy chủ, ví dụ bạn có thể đặt hẹn giờ 8 phút rồi cảnh báo rằng phiên hết hạn sau 2 phút ... Tất nhiên bạn muốn hiển thị thời gian thực tế, không phải là tĩnh thông điệp.

Nhìn vào phương pháp setTimeout. This link có thông tin về một số phương pháp định thời gian javascript bạn có thể sử dụng.

+0

Điều này. Không giải quyết vấn đề (trượt hết hạn, doen't thiết lập phiên hết hạn để bắt đầu điểm (10 phút.) Nó add's "một số thời gian".) ... Nhưng khi thời gian phiên còn lại ít hơn một nửa và người dùng làm một số hành động. Tôi nhận được giá trị 600 giây, nhưng nó không phải là bằng nhau cho thời gian phiên trái, bởi vì "slidingExpiration" thêm một thời gian (tôi không biết bao nhiêu), nhưng không reset phiên trái thời gian để bắt đầu 10 phút điểm. – Drasius

0

Tiếp theo cách tiếp cận Drasius tôi mã hóa một giải pháp VB như sau.

Trong global.asa trên session_start Tôi có -

Session("sessStart") = DateTime.Now 
    Session("TO") = Session.Timeout 

Trong trang masterfile Tôi có -

Dim timemsg As String = "" 
    Dim sstrt As DateTime = Session("sessStart") 
    timemsg = "Strt=" & sstrt.ToShortTimeString() & " TO=" & Session("TO") & "<br />" 
    Dim datenow = DateTime.Now 
    Dim cusrn = HttpContext.Current.User.Identity.Name 
    If cusrn <> "" Then 
     Dim authcookie As System.Web.HttpCookie 
     authcookie = HttpContext.Current.Request.Cookies(FormsAuthentication.FormsCookieName) 
     Dim authTicket As System.Web.Security.FormsAuthenticationTicket 
     authTicket = FormsAuthentication.Decrypt(authcookie.Value) 
     Dim leftminutes = (authTicket.Expiration - datenow).TotalMinutes 
     timemsg &= "Remain: " 
     If leftminutes > 0 Then 
      timemsg &= leftminutes.ToString("F1") & " mins" 
     Else 
      timemsg &= "0 mins" 
     End If 
    End If 
    lblShowTime.Text = timemsg 

này hoạt động sau một thời trang - khi tôi làm mới trang tôi nhận được một giảm thời gian chờ. Tuy nhiên, thời gian ban đầu còn lại luôn luôn hiển thị 30 phút, mặc dù tôi có thiết lập web.config như sau:

<sessionState mode="InProc" timeout="20" /> 

Vì vậy, tôi không quá chắc chắn rằng phương pháp này là đưa ra một thời gian chờ đó thực sự được đồng bộ hóa với thực tế thời gian chờ của phiên.

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