2012-05-07 26 views
22

tôi đã chỉ định thời gian phiên trong tệp web.config..khi phiên là hết thời gian chờ không nhận được chuyển hướng đến trang đăng nhập nhưng tôi gặp lỗi khi nói tham chiếu đối tượng không được đặt thành một thể hiện.Cách kiểm tra xem phiên có hết hạn hay không trong asp.net

bất kỳ ai có thể cho tôi biết giải pháp cho điều này không?

+2

Đăng mã của bạn. Làm cách nào bạn kiểm tra hết hạn phiên? – Oded

+0

Chia sẻ cấu hình web của bạn cũng như – Deepesh

+0

Hai điều khác nhau: Phiên không ảnh hưởng trực tiếp đến trạng thái xác thực. Nếu bạn đang sử dụng FormsAuth, trạng thái vé của bạn sẽ thực hiện. Vì vậy, nếu bạn cần phải đi văng giá trị của vé của bạn trong tình trạng của phiên (đó là một ý tưởng tồi, BTW), bạn sẽ cần quản lý bằng tay. – HackedByChinese

Trả lời

14

Bạn có thể kiểm tra HttpContext.Current.User.Identity.IsAuthenticated tài sản mà sẽ cho phép bạn biết liệu có một hiện thực người dùng hay không.

+6

Việc hết hạn phiên có đồng nghĩa với 'IsAuthenticated' thay đổi thành false không? – toddmo

+1

Cho dù khách truy cập lần đầu tiên hoặc người dùng đã hết thời gian, 'HttpContext.User.Identity' sẽ có cùng giá trị. – Bardicer

9

Sửa

bạn có thể sử dụng thuộc tính IsNewSession để kiểm tra xem phiên đã được tạo ra theo yêu cầu của trang

protected void Page_Load() 
{ 
    if (Context.Session != null) 
    { 
     if (Session.IsNewSession) 
     { 
     string cookieHeader = Request.Headers["Cookie"]; 
     if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)) 
     { 
      Response.Redirect("sessionTimeout.htm"); 
     } 
     } 
    } 
} 

trước

cửa hàng userid trong biến session khi người dùng đăng nhập vào trang web và kiểm tra trên trang chủ của bạn hoặc tạo ra trang cơ sở hình thức whihc trang khác có được thừa hưởng ... và trong tải trang kiểm tra mà userid i s hiện tại hay không nếu không hơn chuyển hướng đến trang đăng nhập

if(Session["Userid"]==null) 
{ 
    //session expire redirect to login page 
} 
+0

Cảm ơn bạn ... nhưng điều này có thể được sử dụng cho chỉ một giá trị phiên .. tôi đã sử dụng nhiều phiên trong dự án của tôi vì vậy tôi muốn mã được chỉ định trong tệp web.config ... áp dụng cho tất cả các trang – user1379439

+0

@ user1379439 - điều này sẽ hoạt động cho tất cả các phiên không phải cho phiên ..... duy nhất được tạo như đăng nhập sử dụng vào hệ thống ... bạn muốn gì khác? bạn có ý tưởng về phiên phải không? –

+0

@ user1379439 - chuyển đến url này, bạn có thể nhận được những gì bạn muốn ... http: //www.google.co.in/url? Q = http: //www.codeproject.com/Articles/227382/Alert-Session -time-ra-trong-ASP-Net & sa = U & ei = LLKnT8PeMpDzrQe3itHRAQ & ved = 0CBIQFjAA & sig2 = NDlgZI2yyYDIaQ3C1E-HGA & USG = AFQjCNF-3O2DlOTaG5dmjBsFqR63vmh2WQ –

6

Kiểm tra nếu nó là null hay không ví dụ

if(Session["mykey"] != null) 
{ 
    // Session is not expired 
} 
else 
{ 
    //Session is expired 
} 
7

Tôi không muốn kiểm tra biến phiên trong mã thay vì sử dụng FormAuthentication. Chúng có chức năng sẵn có để chuyển hướng đến LoginPage được chỉ định trong web.config.

Tuy nhiên nếu bạn muốn kiểm tra rõ ràng phiên, bạn có thể kiểm tra giá trị NULL cho bất kỳ biến nào bạn đã tạo trong phiên trước đó như Pranay đã trả lời.

Bạn có thể tạo trang Login.aspx và viết tin nhắn của bạn ở đó, khi phiên hết hạn FormAuthentication tự động chuyển hướng đến loginUrl được đưa ra trong phần FormAuthentication

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="30"> 
    </forms> 
</authentication> 

Cái này là bạn không thể cung cấp cho trang riêng biệt cho Đăng ký và SessionExpire, vì vậy bạn phải hiển thị/ẩn một số phần trên Login.aspx để thực hiện cả hai cách.

Có một cách khác để chuyển hướng đến sessionexpire trang sau thời gian chờ mà không thay đổi formauthentication-> loginUrl, xem liên kết dưới đây cho việc này: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html

+0

Cảm ơn bạn .. tôi đã nhận mã hết hạn phiên ... Bây giờ tôi muốn thông báo sẽ được hiển thị hoặc thông báo cảnh báo khi phiên hết hạn cho người dùng ... Bạn có biết mã này không? – user1379439

+0

Tôi đã sửa đổi câu trả lời của mình –

7

Sử dụng Session.Contents.Count:

if (Session.Contents.Count == 0) 
{ 
    Response.Write(".NET session has Expired"); 
    Response.End(); 
} 
else 
{ 
    InitializeControls(); 
} 

Đoạn mã trên giả định rằng bạn có ít nhất một biến phiên được tạo khi người dùng truy cập trang web của bạn lần đầu tiên. Nếu bạn không có thì bạn có nhiều khả năng không sử dụng cơ sở dữ liệu cho ứng dụng của mình. Đối với trường hợp của bạn, bạn chỉ có thể gán biến phiên theo cách thủ công bằng cách sử dụng ví dụ bên dưới.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["user_id"] = 1; 
} 

Chúc bạn may mắn!

2

Tôi sử dụng câu trả lời @ Adi-lester và thêm một số phương pháp.

Phương pháp để xác minh nếu phiên là Alive

public static void SessionIsAlive(HttpSessionStateBase Session) 
{ 
    if (Session.Contents.Count == 0) 
    { 
     Response.Redirect("Timeout.html"); 
    } 
    else 
    { 
     InitializeControls(); 
    } 
} 

Tạo phiên var trong tải trang

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["user_id"] = 1; 
} 

Tạo phương pháp SAVEDATA (nhưng bạn có thể sử dụng nó trong tất cả các phương pháp)

protected void SaveData() 
{ 
    // Verify if Session is Alive 
    SessionIsAlive(Session); 

    //Save Data Process 
    // bla 
    // bla 
    // bla 
} 
1

Ở đây tôi kiểm tra các giá trị phiên (hai giá trị được điền vào hộp văn bản trên trang trước)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["sessUnit_code"] == null || Session["sessgrcSerial"] == null) 
    { 
     Response.Write("<Script Language = 'JavaScript'> alert('Go to GRC Tab and fill Unit Code and GRC Serial number first')</script>"); 
    } 
    else 
    { 

     lblUnit.Text = Session["sessUnit_code"].ToString(); 
     LblGrcSr.Text = Session["sessgrcSerial"].ToString(); 
    } 
} 
1

cách này nhiều người phát hiện phiên đã hết hạn hay không. mã dưới đây có thể giúp bạn.

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Context.Session != null) 
     { 
      if (Session.IsNewSession) 
      { 
       HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"]; 
       if (newSessionIdCookie != null) 
       { 
        string newSessionIdCookieValue = newSessionIdCookie.Value; 
        if (newSessionIdCookieValue != string.Empty) 
        { 
         // This means Session was timed Out and New Session was started 
         Response.Redirect("Login.aspx"); 
        } 
       } 
      } 
     } 
    } 
Các vấn đề liên quan