在 ASP.NET MVC 中添加 Cookie 集合

Add Collection of Cookie in ASP.NET MVC

如何在 ASP.NET MVC 中添加 cookie 集合?

通常,我使用这个代码:

    [HttpPost]
    public ActionResult AddCookie()
    {
        Response.Cookies["Profile"]["Test1"] = "Something1";
        Response.Cookies["Profile"]["Test2"] = "Something2";
        Response.Cookies["Profile"]["Test3"] = "Something3";
        return RedirectToAction("Index", "Home");
    }

但是有没有更快的方法呢?

例如使用NameValueCollection:

        var nv = new NameValueCollection();
        nv["Test1"] = "Something1";
        nv["Test2"] = "Something2";
        nv["Test3"] = "Something3";
        // add Profile cookie here with nv values

您可以使用 JSON 而不是不同的键值:

假设您有一个 FooStorage class,如下所示:

public class FooStorage
{
    public int SomeInteger { get; set; }
    public string? SomeString { get; set; }
    public List<string>? SomeMoreString { get; set; }
}

现在您可以在上述 class 的实例中存储您需要的任何数据(您也应该考虑安全性)。

例如:

var fooAsJSON = JsonSerializer.Serialize(new FooStorage
{
    SomeInteger = 1,
    SomeString = "Foo",
    SomeMoreString = new List<string>
    {
        "Foo1","Foo2","Foo3","a Long Long Long Foo",
    }
});

// Store your fooAsJSON in the cookie and then use it.

var another = JsonSerializer.Deserialize<FooStorage>(fooAsJSON);

但是,就安全性而言,您不应该太相信 cookie。 消费者更改和操纵 cookie 很简单,您可能不希望对每个请求收取任何重大基础设施成本。

我认为将其缓存在服务器上是一个更好的解决方案。

注意:您需要using System.Text.Json;才能使用JsonSerializer

这是你想要的吗?

public ActionResult Index()
{
    HttpCookie testCookie = new HttpCookie("test");
    testCookie["name"] = "user1";
    testCookie["age"] = "18";
    testCookie.Expires.Add(new TimeSpan(0, 1, 0));
    Response.Cookies.Add(testCookie);
    return View();
}