gpt4 book ai didi

c# - 在 session 中存储自定义对象

转载 作者:IT王子 更新时间:2023-10-29 04:09:34 26 4
gpt4 key购买 nike

在 session 中存储自定义对象的一般方式是什么?

我计划在整个 Web 应用程序中将我的购物车保持在一个 session 中。当该用户注销时, session 将被清除。

Class ShoppingCart
{
private List<CartItem> Items = new List<CartItem>();

public ShoppingCart()
{
this.Items = new List<CartItem>();
if (HttpCurrent.Current["Cart"]!=null])
{
this.Items = ShoppingCart.loadCart(HttpCurrent.Current["User"]);
}
}
}

当用户登录时,我将购物车放入 session 中,例如:

Session["Cart"] = new ShoppingCart();

但是我是否必须在每个页面上都写上Session["Cart"]?有没有更简单的方法来做到这一点?访客购物车 session 又如何呢?我将在哪里声明?

我希望每个用户 session 都存储在一个唯一的 session 中,以便访客 session 和成员(member) session 之间不会混淆。

最佳答案

ASP.NET session 对应于浏览器 session - 它与用户是否经过身份验证(登录)无关。因此,关于 guest /成员(member) session ,您不应该有任何问题。我建议您通过静态访问器属性公开当前的购物车 - 例如

Class ShoppingCart {

public static ShoppingCart Current
{
get
{
var cart = HttpContext.Current.Session["Cart"] as ShoppingCart;
if (null == cart)
{
cart = new ShoppingCart();
HttpContext.Current.Session["Cart"] = cart;
}
return cart;
}
}

... // rest of the code

}

这里需要考虑的几件事:

  1. 每当网络应用程序或网络服务器回收/重新启动时,您的进程内 session 就会丢失。这意味着您需要在适当的时候将您的 session 保存在数据库中。
  2. 您可以使用进程外 session 存储(数据库或不同的服务器)——在这种情况下,您必须将购物车类标记为可序列化。进程外 session 会产生性能成本。因此,您已经将 session 存储在数据库中,因此 IMO,您应该使用进程内 session ,确保尽快将脏 session 写入数据库。

关于c# - 在 session 中存储自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5644304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com