我有一个默认的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 = "";
}
}