【问题标题】:A list of objects get lost after a new session is created创建新会话后,对象列表会丢失
【发布时间】:2014-03-26 21:58:02
【问题描述】:

我经常在我的应用程序中显示一个用于浏览或管理目的的对象列表。用户搜索数据库并根据他的请求获取对象列表。

我想知道是否有一种安全的方法可以使这些对象列表在新会话中继续存在。据我所知,在 ASP.NET MVC 中,当创建新会话时(无论是因为进行了重定向还是创建了新类,无论是什么原因),静态变量或类似的数据结构(例如:Session[ "listObjects"]) 因为新会话而清空了它们的值。

这是一个问题,因为我想避免在数据库中注册东西,因为此时没有必要。在向数据库提交任何更改之前,我经常需要进行多达 5 或 6 次不同的调用,有时这会创建新条目我仍然需要显示旧列表,同时它会被刷新。

那么除了将它们存储在数据库中之外,还有什么方法可以使数据在新会话中存活或持久化?

【问题讨论】:

  • 缓存对象列表是另一种选择,而不是将它们存储在会话中。例如,使用 NCache。
  • 您是否在会话信息中缓存所有用户真正通用的信息?
  • 嗯,我不知道缓存是如何工作的。我现在正在探索这个。这是常见的数据,非常简单(例如:电子商务的项目列表),我只是希望这些数据保持“活跃”的时间比会话可能允许的时间长。

标签: c# asp.net asp.net-mvc session


【解决方案1】:

除了将它们存储在数据库中之外,还有什么方法可以使数据在新会话中存活或持久化?

好吧,您可以将数据保存在一个文件中,但这是否容易取决于您的结构。您的数据是否包含在一个可以以 XML 形式保存到文件的类中?

你也可以:

  • 如果数据不经常更改(并且不是用户特定的),请使用配置设置(可以更改)
  • 使用注册表(不会跨服务器扩展)

【讨论】:

  • 您的意思是将列表序列化为 Json 或 XML...?
  • Either - XML 更适合文件存储,而 JSON 更适合跨进程通信。两者都没有错。
  • 这让我想,我可以使用某种 cookie 吗?
  • cookie 的想法很糟糕。 cookie 将在服务器之间的每个请求上传递,cookie 大小为 256K MAX...
  • 如果这是用户特定的数据,并且您不在乎他们是否/何时清除 可能 有效的 cookie,但它会让您无法控制很多事情,您需要占。另外,在大多数浏览器中接受 cookie 是可选的,那么如果他们不想接受 cookie,你该怎么办?
【解决方案2】:

您如何检索对象列表?你能把参数存储在Query String?

【讨论】:

  • 可能很有趣,但我最终会遇到同样的问题,查询字符串可能会因为新状态而被刷新,不是吗?
  • 不,这就是它的好处。当用户重定向时,变量可以存储在 url 的查询字符串中以供以后获取。这是一种在页面/会话之间共享数据的方式。
  • 您能否提供一个 c# 中的示例,说明我如何做到这一点?
  • 当然。假设您有两个页面,page1.aspx 和 page2.aspx。在 page1 中,您可能有类似的内容:String pg1Key = textBox1.Text。如果您想检索此键在 page2 中设置的内容,您可以在 page1 中进行重定向,例如:Response.Redirect("page2.aspx?key=" + pg1Key)。然后,在 page2 中,您将使用以下方法获取密钥: String pg2key = Request.QueryString("key").
  • 我还应该补充一点,它不仅限于一个变量,您可以将多个变量添加到 QueryString。
猜你喜欢
  • 2015-04-26
  • 2016-01-21
  • 1970-01-01
  • 2012-04-11
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多