如果cookie为null,则强制.net登录控件使用户注销

时间:2010-10-07 13:13:23

标签: asp.net cookies login

我有一个连接到2个数据库的代码库Web应用程序。根据用户登录的登录控件,将不同的数据库连接到代码。我正在通过cookie完成所有这些。此cookie位于名为AuthenticatedUser的公共类中。该课程如下:

public class AuthenticatedUser : System.Web.UI.Page
{
    public static string ConnectionString
    {
        get
        {
            HttpCookie myCookie = HttpContext.Current.Request.Cookies["connectionString"];
            return GetConnectionStringFromName(myCookie);
        }
        set
        {
            if (HttpContext.Current.Request.Cookies["connectionString"] != null)
            {
                ExpireCookies(HttpContext.Current);
            }
            var allCookies = HttpContext.Current.Request.Cookies.AllKeys;
            HttpCookie cookie = new HttpCookie("connectionString");
            cookie.Value = value;
            cookie.Expires = DateTime.Now.AddYears(100);
            HttpContext.Current.Response.Cookies.Add(cookie);
        }
    }

    private static string GetConnectionStringFromName(HttpCookie myCookie)
{
    try
    {
        string connectionStringName = myCookie.Value;
        return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
    }
    catch
    {
       FormsAuthentication.SignOut();   
    }
     finally
    {
         HttpContext.Current.Response.Redirect("/default.aspx");
    }
    return "";

}        private static void ExpireCookies(HttpContext current)
    {
        var allCookies = current.Request.Cookies.AllKeys;
        foreach (var cook in allCookies.Select(c => current.Response.Cookies[c]).Where(cook => cook != null))
        {
            cook.Value = "";
            cook.Expires = DateTime.Now.AddDays(-1);
            current.Request.Cookies.Remove(cook.Name);
            cook.Name = "";
        }
    } 
}

这似乎适用于我的开发机器,但是当我尝试部署它时,任何使用网站上“记住我”选项的用户都会收到空引用错误,因为他们没有使用登录控件来获取cookie。

解决这个问题的最佳方法是什么?我在想如果用户登录但是AuthenticatedUser类无法获取Connectionstring来注销用户以强制他们再次使用登录控件。我该怎么办?

1 个答案:

答案 0 :(得分:1)

尝试使用:

try  
{  
      FormsAuthentication.SignOut();  
}  
finally  
{  
      Response.Redirect("~/Home.aspx");  
}

这种方式更可取,例如,如果在某些时候你决定不使用cookie身份验证,而是基于URL,那么FormsAuthentication将优雅地管理它。