0

我有一个 asp.net 登录页面。为了安全起见,我想清除缓存。但我不知道我应该把代码放在哪里。

感谢您提供代码片段建议。

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        bool UserAuthenticated = false;
        MembershipProvider AuthenticationProviderUsed = null;
        RoleProvider roleProvider = Roles.Providers["SqlRoleProvider"];
        // Try authenticating the user against each membership provider
        foreach (MembershipProvider membershipProvider in Membership.Providers)
        {
            try
            {
               ...
                 Page.Session.Add("workspriv", access_value);
            }
          if (UserAuthenticated)
          {
            Response.Redirect("~/Search.aspx");
          }
  }     

    protected void Page_Load(object sender, EventArgs e)
    {
        lblDisclaimerText.Text = AntiXss.HtmlEncode(ConfigurationManager.AppSettings["DisclaimerText"]);
        if (!IsPostBack)
        {
            if (Request.QueryString["Action"] != null && Request.QueryString["Action"].ToLower() == "logout")
            {
                Session.Abandon();
                FormsAuthentication.SignOut();
                FormsAuthentication.RedirectToLoginPage();

            }
        }
    }
4

2 回答 2

1

我只是担心用户的登录信息存储在缓存中

它不是。如果用户在离开页面后可以重新建立会话,那是因为他们仍然拥有上次访问的会话 cookie。

话虽如此,如果您仍想清除缓存:

要清除缓存内存,您可以执行以下操作:

IDictionaryEnumerator enumerator = HttpContext.Current.Cache.GetEnumerator();

while (enumerator.MoveNext())

{

    HttpContext.Current.Cache.Remove(enumerator.Key);

}

清除输出缓存:

HttpRuntime.Close();

http://weblogs.asp.net/morteza/archive/2008/08/11/how-to-remove-all-items-from-cache-memory.aspx

于 2012-07-11T20:32:12.263 回答
0

请在此行之前调用它 bool UserAuthenticated = false; 或页面加载

List<string> cacheList = (from DictionaryEntry cache in HttpRuntime.Cache select cache.Key.ToString()).ToList();
cacheList.ForEach(c => HttpRuntime.Cache.Remove(c));
于 2012-07-11T20:36:43.787 回答