基于登录信息的C#Cookies
我在一个web应用程序上有两个登录控件,一个是默认的,另一个是默认的(命名约定将在我工作后更新) 我所做的是在每个登录名上设置一个cookie,该cookie将从login controls authenticate方法发送一个connectionstring名称。它将一个硬编码的字符串发送到名为Authenticate Users的基类。全班同学正在做以下工作基于登录信息的C#Cookies,c#,.net,cookies,C#,.net,Cookies,我在一个web应用程序上有两个登录控件,一个是默认的,另一个是默认的(命名约定将在我工作后更新) 我所做的是在每个登录名上设置一个cookie,该cookie将从login controls authenticate方法发送一个connectionstring名称。它将一个硬编码的字符串发送到名为Authenticate Users的基类。全班同学正在做以下工作 public class AuthenticatedUser : System.Web.UI.Page { public static
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);
}
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);
}
}
您需要部分代码(使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);
}
}