会话变量并将它们持久保存到数据库中

时间:2011-08-25 13:08:52

标签: c# asp.net session caching webforms

所以我对这个主题有一些了解,但我很难找到这个应用的研究地点或内容。我正在为c#和asp.net Web表单开发一个Web应用程序,并在会话中为每个用户保存信息。

我只是想知道何时应该超时会话以及有关将会话持久保存到数据库的任何信息,以便以后可以访问它。变量在会话中频繁更改,我不希望它每次都会影响性能以在数据库中保留这些更改。

这样做的目的是为每个客户的信息保存会话中的变量,因为他们预先形成了多个交易并在最后付款。如果有人离开10分钟并且会话超时,我想要一种方法来获取该信息以完成订单。我也不希望这会影响性能。

我也可以实现一个会话超时,触发一个弹出屏幕,只有当用户希望而不是每次发生变化时,才会将这些更改持久保存到数据库中。

这是我第一次在网络应用中处理会话或缓存,我想知道更多信息或在哪里查看或如何解决此问题。

谢谢。

3 个答案:

答案 0 :(得分:2)

如果您在会话中保存的信息不敏感,我建议您将信息存储在Cookie中。 Cookie不会受会话超时影响。它还使您能够使用以后在另一个会话中保留的数据。

例如:您可以跟踪用户查看的项目/产品。下次他们访问时,您可以向他们显示“最近查看的项目”。 Amazon.com为此目的使用cookie(以及许多其他人)。

如果您确实要将信息存储在数据库中,或者信息太多/太敏感而无法存储在cookie中,您可以将其保存到数据库中,然后使用包含该数据的记录的ID编写一个cookie。信息。这样,当用户返回站点时,您可以根据cookie中的ID在DB中查找以前的会话信息。

ASP.NET Cookies Overview

答案 1 :(得分:1)

SessionStateStore已经保存了您的会话信息。当会话超时时,您将丢失与用户会话相关的所有信息。即使您在会话到期时将购物车内容保存到数据库(有一个事件),您也无法分辨哪个购物车属于该用户。你回来时甚至无法识别旧用户。

您有两种选择:a)延长会话超时时间。 b)正如James建议的那样,将重要信息存储到cookie中以独立于会话存储。

答案 2 :(得分:1)

如果你需要在像数据库这样的持久存储中保留一些“会话”数据,我认为这不是会话数据,而是其他东西。

阅读您的问题我认为这是某种工作流程而不是会话数据

ASP.NET中的会话状态并非设计用于存储大部分数据;它更多地用于存储字符串,整数,guid等基本值,并使用这些标识符(,因为,例如,SQLServer,StateServer或自定义会话状态模式序列化存储的对象,并在再次检索它们时反序列化它们,以及显然复杂类型对性能有很大影响 - 跟踪某种用户交互。

总结一下,我不会将“性能损失”称为存储用户状态或用户相关数据更改,而是将可用资源用于正确的目标。

与HTTP cookie一起使用,在会话超时后,因为cookie会有某种标识符,所以服务器端逻辑应该能够恢复关联数据并再次将其存储在会话状态。

无论如何,如果您担心此类解决方案对性能的影响,您可以切换到n层架构,例如:

  • 一台计算机将具有实现业务和数据访问的基于Windows Communication Foundation的服务。

  • 托管ASP.NET Web窗体应用程序的一台计算机。

在这种情况下,浏览ASP.NET应用程序的人 - 用户界面 - 将不会遇到定期将会话相关数据更新到某些数据存储的副作用,因为这会可以在一个单独的过程或机器中完成。