我有一個默認的web應用程序和一個默認2的web應用程序的2個登錄控件(命名約定會在我得到它的工作後更新)。C#基於登錄信息的Cookie
我在做的是在每次登錄時設置一個cookie,從login controls authenticate方法發送連接字符串名稱。它發送一個硬編碼到名爲Authenticate Users的基類的字符串。該類執行以下操作...
public class AuthenticatedUser : System.Web.UI.Page
{
public static string ConnectionString
{
get
{
HttpCookie myCookie = HttpContext.Current.Request.Cookies["connectionString"];
return GetConnectionStringFromName(myCookie);
}
set
{
HttpCookie oldCookie = HttpContext.Current.Request.Cookies["connectionString"];
oldCookie.Expires = DateTime.Now.AddDays(-1);
HttpCookie cookie = new HttpCookie("connectionString");
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(100);
HttpContext.Current.Request.Cookies.Add(cookie);
string val = cookie.Value;
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
}
我的琴絃「數據庫1」和「DATABASE2」,這取決於seding登錄他們使用的控制。當我通過代碼進行調試時,連接字符串設置了所有cookie信息,並且對於「database2」,一切都很好。但是,每次我使用與「database1」關聯的表單登錄時,它都會設置Cookie,但是當調用get時它仍然引用「database2」
這是一個問題,因爲cookie被命名爲相同的並且不覆蓋eachother或自我更新或者是否存在與我的代碼有關的問題?
編輯 - 它仍然沒有從上下文中取出餅乾的工作,但它仍然給了我「DATABASE2」當我運行「數據庫1」
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);
}
HttpCookie cookie = HttpContext.Current.Response.Cookies["connectionString"];
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(100);
HttpContext.Current.Response.Cookies.Add(cookie);
string val = cookie.Value;
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
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.Response.Cookies.Remove(cook.Name);
}
}
最後編輯它的工作原理...這裏是工作代碼,如果有人感興趣...
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.Request.Cookies.Add(cookie);
string val = cookie.Value;
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
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 = "";
}
}