asp.net:检查会话是否有效

asp.net:检查会话是否有效,asp.net,Asp.net,如何在30分钟后检查用户是否经过身份验证以及会话在页面上是否有效。您必须使会话在特定时间后过期 因此,您的web.config中有一个部分,或者您必须在 把这一部分放在里面: <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" stateNetworkTimeout="10" cookieless="false" timeout="30" /> 并在需要时检查会话[“已验证”] 会话

如何在30分钟后检查用户是否经过身份验证以及会话在页面上是否有效。

您必须使会话在特定时间后过期

因此,您的
web.config中有一个部分
,或者您必须在

把这一部分放在里面:

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"
  stateNetworkTimeout="10" cookieless="false" timeout="30" />
并在需要时检查
会话[“已验证”]

会话
对象将在会话实例化30分钟后过期


希望这有帮助。如果您遇到麻烦,请随时给我留言。

在会话开始时,您可以通过
全局存储会话状态中的一些键值。asax

void Session_Start(object sender, EventArgs e) 
{
    Session["userId"] = userId;  // obtained from a data source or some other unique value, etc.
}
每当用户发出页面请求或回发时,在加载任何或所有页面时,检查会话值是否为空:

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

如果是,则会话已过期,您可以重定向到注销页面或其他任何页面。超时时间间隔在您的
web.config
文件中定义。

假设您正在连接到或在IIS中使用基本/摘要身份验证,那么您可以很容易地判断用户是否通过以下方式进行了身份验证:

if (Request.IsAuthenticated)
{
  // User is authenticated, allow them to do things
}
如果其身份验证令牌已过期(Forms Auth的默认值为20分钟,Windows Auth应在每个请求中正确重新身份验证),则下次检查时,IsAuthenticated将返回false

您可以在用户会话中存储一个映射回其用户帐户的令牌(其用户名或用户id或类似内容的哈希),然后在请求中检查这两个令牌-如果它们不匹配,则会话无效:

// 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>


如果您计划实施一个登录系统,我建议您调查Asp.Net成员资格。是否有必要签入每个页面?global.asax中是否有任何事件?我通常会检查每个页面的加载情况…HttpHandler可能?我猜会话结束时不会工作…HttpApplication.BeginRequest如何?我可以检查其中的有效性吗?”r每个请求?@uj-并非如此,因为BeginRequest发生在AcquisiteRequestState中获取会话状态之前-您需要连接到该会话状态以检查用户会话状态,可能还有PostAuthenticateRequest和Authorize/PostAuthorizerRequestevents@uj-为了避免在每个页面上重复代码,您可以创建一个基页所有页面从中继承的ass。在该基类中,您可以在其页面加载事件处理程序中进行条件检查。
<location path="SecureDirectory">
  <system.web>
     <authorization>
        <deny users="?"/>
     </authorization>
  </system.web>
</location>