2010-04-08 155 views
1

如何檢查用戶是否通過身份驗證,並且會話在30分鐘後在頁面上有效。asp.net:檢查會話是否有效

+0

如果您打算實施登錄系統,我建議您查看Asp.Net會員資格API – Midhat 2010-04-08 07:28:24

回答

0

您必須在特定時間後讓會話過期。

因此,有你的web.config一個部分,或者你必須添加把裏面的這個部分<system.web />

部分:如果您發現我們使用InProc模式和超時是

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" 
    stateNetworkTimeout="10" cookieless="false" timeout="30" /> 

30

現在它完全取決於你。

添加一個keySession對象,當你可以找到任何WebForm頁面。

public void btnLogin(object sender, EventArgs e) { 
    if (validUser) { 
     Session["authenticated"] = true; 
    } 
} 

並在需要時檢查Session["authenticated"]

Session對象將在30分鐘的會話實例化中過期。

希望得到這個幫助。如果您遇到麻煩,請隨時留下評論。

0

在會議開始時,你可以通過Global.asax存儲在會話狀態的一些鍵值:

void Session_Start(object sender, EventArgs e) 
{ 
    Session["userId"] = userId; // obtained from a data source or some other unique value, etc. 
} 

每當用戶進行頁面請求或回傳,在任何或所有網頁的頁面加載,檢查是否會話值爲null:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(Session["userId"] == null) 
    { 
     Response.Redirect("logout.aspx"); 
    } 
    // do other stuff 
} 

如果是,那麼會話已過期,您可以重定向然後註銷頁面或什麼的。超時間隔在您的web.config文件中定義。

+0

是否有必要檢查每個頁面? global.asax中是否有任何事件? Noramlly我會檢查每頁的onload ... httphandlers也許? – 2010-04-08 08:09:12

+0

我猜session_end不會工作...如何abt HttpApplication.BeginRequest?我可以檢查每個請求的有效性嗎? – 2010-04-08 08:14:51

+0

@uj - 不是真的,因爲BeginRequest發生**在AcquireRequestState中獲取會話狀態之前 - 您需要掛鉤以檢查用戶會話狀態,以及潛在的PostAuthenticateRequest和Authorize/PostAuthorizeRequest事件 – 2010-04-08 08:20:12

2

假設你要麼鉤住standard ASP.NET membership providers或使用IIS基本/摘要式身份驗證,那麼你可以很容易地告訴我們,如果一個用戶使用證實:

if (Request.IsAuthenticated) 
{ 
    // User is authenticated, allow them to do things 
} 

如果他們的身份驗證令牌已過期(默認爲20分鐘對於Forms Auth,Windows auth應該對每個請求重新進行正確的驗證),然後在下次檢查時,IsAuthenticated將返回false。

您可以在用戶會話中存儲一個令牌,該令牌映射回其用戶帳戶(或者是其用戶名的散列或其用戶標識或類似內容),然後檢查請求中的兩個 - 如果它們不是'牛逼匹配,則會話已經失效:

// Get the current user, and store their ID in session 
MembershipUser user = Membership.GetUser(); 
Session["UserId"] = user.ProviderUserKey; 

要對此進行檢查:

if (null != Session["UserId"]) { 
    MembershipUser user = Membership.GetUser(); 

    if (Session["UserId"] == user.ProviderUserKey) { 
    // User and session are valid 
    } 
} 

但說實話,這取決於你正在嘗試做的。

如果你想,如果用戶沒有登錄限制訪問您的網站的某些區域,那麼在配置機制,允許爲:

在你的web.config,您可以添加行像下面這樣:

<location path="SecureDirectory"> 
    <system.web> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
    </system.web> 
</location> 

這將拒絕所有匿名用戶訪問目錄/SecureDirectory/和它下面的所有內容,並指導他們,而不是給你配置的登錄頁 - 爲授權元素的詳細信息,請參閱「How to: Configure Directories Using Location Settings」 。