我有一个连接到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来注销用户以强制他们再次使用登录控件。我该怎么办?
答案 0 :(得分:1)
尝试使用:
try
{
FormsAuthentication.SignOut();
}
finally
{
Response.Redirect("~/Home.aspx");
}
这种方式更可取,例如,如果在某些时候你决定不使用cookie身份验证,而是基于URL,那么FormsAuthentication将优雅地管理它。