Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于登录信息的C#Cookies_C#_.net_Cookies - Fatal编程技术网

基于登录信息的C#Cookies

基于登录信息的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

我在一个web应用程序上有两个登录控件,一个是默认的,另一个是默认的(命名约定将在我工作后更新)

我所做的是在每个登录名上设置一个cookie,该cookie将从login controls authenticate方法发送一个connectionstring名称。它将一个硬编码的字符串发送到名为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);
        }
        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);
        }

    }