【问题标题】:How to add/remove/replace LIST in cookies using C#如何使用 C# 在 cookie 中添加/删除/替换 LIST
【发布时间】:2011-02-07 16:50:30
【问题描述】:

如何使用 C# 在 cookie 中添加/删除/替换 LIST。

//Declaring the List for image list

List<string> imageList = new List<string>();
foreach (FeaturedPromo promo in base.FeaturedPromos)
{
    imageList.Add(promo.ImageHref);
}

在上面的代码中,我有一个包含所有 Image HREF 值的列表,现在我想使用 C# 在 cookie 中添加这些值,之后我可以从 cookie 中删除该项目,并将该值替换为其他值Cookie 中的相同项目。

请推荐!

【问题讨论】:

    标签: c# cookies


    【解决方案1】:

    Cookie 不会被删除,它们只是被覆盖或过期(有时会被强制过期)。

    要将其添加到 cookie,只需创建一个 Cookie 名称值集合并将列表中的每个项目添加到集合中。

    将项目列表添加到 cookie 的示例:

    System.Collections.Specialized.NameValueCollection cookiecoll = new System.Collections.Specialized.NameValueCollection();
    for(int i = 0 ; i < imageList.Length; i++)
    {
        cookiecoll.Add("item_" + i,imageList[i] );
    }
    
    HttpCookie cookielist = new HttpCookie("MyListOfCookies");
    cookielist.Values.Add(cookiecoll);
    Response.Cookies.Add(cookielist);
    

    编辑“item_2”的示例

     Response.Cookies["MyListofCookies"].Values["item_3"] = "new value";
    

    删除 cookie 的示例:

    Response.Cookies["MyListOfCookies"].Expires = DateTime.Now.AddDays(-1);
    

    从列表中删除单个项目的示例(只是不覆盖任何内容)

    Response.Cookies["MyListOfCookies"].Values["item_3"] = String.Empty;
    


    注意:但请记住,您不能在 cookie 中添加太多数据。许多浏览器对您可以存储的 cookie 的大小和数量都有上限。

    【讨论】:

    • @Thanks Shekhar,我可以提供一些示例代码或链接,我可以在其中查看如何添加、删除 cookie 中的 LIST,然后我可以进一步更改 cookie 中的值
    • @MKS 我已经更新了我的答案......要刷新你仍然需要覆盖这些值.. 删除项目中的单个值只需将项目编辑为 String.Empty;
    • 感谢 Shekhar,现在您上面的代码只是在 cookie 中添加/编辑和删除值,我正在寻找更多内容,需要您的帮助/建议,在 cookie 中添加这些值后,如何刷新如果 ImageList 中的任何值已更改,则为 cookie。我的意思是,如果 Image HREF 发生更改,我想刷新 cookie 并在其中添加新值。你能看看这个问题stackoverflow.com/questions/4918367/…
    • 嗯,感谢 Shekhar 在这个问题上的帮助,在您上面的代码中,在将集合添加到 cookie 值时,我们需要使用“cookielist.Values.Add(cookiecoll);”而不是“cookielist.Values = cookiecoll;”
    • @MKS 是的,抱歉,严重的错误......忘记了 Values 是只读属性......刚刚更正了......
    【解决方案2】:

    你可以使用

    // Add cookie
    HttpContext.Current.Response.Cookies.Add(new HttpCookie("MyCookieBizkit", imageList));
    
    // Remove cookie
    HttpContext.Current.Response.Cookies.Remove("MyCookieBizkit");
    
    // Edit
    HttpContext.Current.Response.Cookies["MyCookieBizkit"] = imageList;
    
    // Get
    imageList = HttpContext.Current.Request.Cookies["MyCookieBizkit"] != null ? (List<string>)HttpContext.Current.Request.Cookies["MyCookieBizkit"] : new List<string>();
    

    【讨论】:

    • 如何修改LIST中的某一个值,是否需要用户NameValueCollection,请指教
    • 一旦您从 Cookie 中获取值,您可以将其转换为原始对象,然后您就恢复正常了。所有 cookie 都存储在 NameValueCollection 对象中。
    • @谢谢,我可以有一些使用上面代码的示例代码,这对我来说真的很新
    • 在您的示例中,您正在向 cookie 添加一个字符串列表,您根本无法更改该列表上的特定值,无论您保存到 cookie 的任何对象,一旦您检索它,它仍然是只要对象是可序列化的,相同的对象。
    • 您可以使用 NameValueCollection 或实际的 FeaturedPromo 它自己,但我不建议这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多