C#Cookies基于登录信息

我在Web应用程序上有2个登录控件,一个在默认情况下,一个在default2上(命名约定将在我工作后更新)。

我正在做的是在每次登录时设置一个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; } 

}

我在字符串“database1”和“database2”中查找,具体取决于它们使用的登录控件。 当我通过代码调试时,connectionstring正在设置所有的cookie信息,并且一切都适用于“database2”但是每次我使用与“database1”相关联的表单登录时它会设置cookie但是当调用get时它仍然是引用“database2”

这是一个问题,因为cookie被命名为相同,不会相互覆盖或更新自己或我的代码有问题吗?

编辑 – 它仍然无法从上下文中删除cookie,当我运行“database1”时它仍然给我“database2”

  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 = ""; } } 

你需要部分代码(使cookie过期)。 但您还需要从上下文中删除,尝试类似以下内容:

 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); } }