1
我有一個代碼庫的Web應用程序連接到2個數據庫。根據用戶使用哪個登錄控件進行登錄,將不同的數據庫連接到代碼。我正在做一個cookie的所有這一切。該cookie位於名爲AuthenticatedUser的公共類中。這個類看起來是這樣的:強制.net登錄控制,使用戶註銷,如果cookie爲空
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註銷用戶強制他們再次使用登錄控制。我該怎麼辦?
我已經更新了代碼,那是你在想什麼?我試圖在我的開發機器上測試它,但我很難再次解決這個問題。這種結構是否正確? – EvanGWatkins 2010-10-07 13:35:45
@EvanGWatkins - 實際上FormsAuthentication.SignOut()會清除身份驗證cookie(如果通過ASP.Net標準方式驗證,或者至少通過FormsAuthentication.SetAuthCookie驗證)。所以你不需要手動刪除它。 – Dewfy 2010-10-07 14:23:39
你能解釋一下嗎?成員登錄是標準登錄,所以我需要做的就是檢查cookie(在嘗試中),如果它很棒,繼續移動,如果它爲空,則註銷用戶並將其重定向到登錄名。 – EvanGWatkins 2010-10-07 14:26:03