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

时间:2010-04-08 07:12:37

标签: asp.net

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

3 个答案:

答案 0 :(得分:2)

假设您要么挂钩standard ASP.NET membership providers或使用IIS中的基本/摘要式身份验证,那么您可以轻松判断用户是否使用以下身份进行身份验证:

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

如果他们的身份验证令牌已过期(使用Forms Auth默认为20分钟,Windows身份验证应该对每个请求重新进行身份验证),那么下次检查时,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>

这将拒绝所有匿名用户访问目录/SecureDirectory/及其下的所有内容,并将其定向到您配置的登录页面 - 有关Authorization元素的更多信息,请参阅“How to: Configure Directories Using Location Settings

答案 1 :(得分:0)

您必须在一段时间后使会话过期。

因此,web.config中有一个部分,或者您必须在<system.web />

中添加该部分

将此部分放入:

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

如果您发现我们使用InProc模式并且超时为30

现在一切都取决于你。

在任意key页面中找到时,在Session对象中添加WebForm

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

并在需要时检查Session["authenticated"]

Session对象将在会话实例化的30分钟内过期。

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

答案 2 :(得分:0)

在会话开始时,您可以通过Global.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文件中定义。