会话变量并将它们持久化到数据库中
本文关键字:持久化 数据库 变量 会话 | 更新日期: 2023-09-27 18:06:33
所以我知道关于这个主题的一些事情,但是我很难找到在哪里或研究这个应用程序。我正在为c#和asp.net web表单开发一个web应用程序,并为每个用户保存会话信息。
我只是想知道什么时候我应该超时会话和关于持久化会话到数据库的任何信息,以便以后可以访问它。变量在会话中被频繁地更改,我不希望每次在数据库中持久化这些更改都会影响性能。
这样做的目的是在会话中为每个客户的信息保存变量,因为他们执行几个交易并在最后支付。如果有人离开了10分钟,并且会话超时,我希望能够获得该信息以完成订单。我也不希望这影响性能。
我也可以实现一个会话超时,触发一个弹出屏幕,将这些更改持久化到数据库中,只有当用户希望,而不是每次都有变化。
这是我第一次在web应用程序中处理会话或缓存,我想知道更多的信息或在哪里看或如何解决这个问题。
谢谢。
如果您保存在会话中的信息不敏感,我建议您将信息存储在cookie中。cookie不会受到会话超时的影响。它还使您能够在以后使用保存在另一个会话中的数据。
例如:您可以跟踪用户查看的项目/产品。下次他们访问时,你可以向他们展示"最近浏览的项目"。Amazon.com为此目的(以及许多其他目的)使用cookie。
如果您真的想将信息存储在数据库中或者信息太敏感而不能存储在cookie中,您可以将其保存到DB中,然后使用包含信息的记录ID写一个cookie。这样,当用户返回到站点时,您就可以根据cookie中的ID在数据库中查找以前的会话信息。
ASP。NET Cookies概述
SessionStateStore已经保存了您的会话信息。当会话超时时,您将丢失与用户会话相关的所有信息。即使在会话到期时将购物车内容保存到数据库中(有一个事件),您也无法判断哪个购物车属于该用户。当老用户回来时,你甚至无法识别他。
您有两个选项:a)延长会话超时时间。b)正如James建议的那样,将重要信息存储在cookie中,以独立于会话存储。
如果你需要在持久化存储(如数据库)中持久化一些"会话"数据,我认为这不是会话数据,而是其他东西。
阅读你的问题,我相信这是某种工作流而不是会话数据。ASP中的会话状态。. NET并不是为存储大量数据而设计的;它更多地用于存储基本值,如字符串、整数、guids等,并使用这些标识符(,因为,例如,SQLServer、StateServer或自定义会话状态模式序列化存储的对象,并在再次检索这些对象时对它们进行反序列化,显然,复杂类型对性能有很高的影响 -跟踪某种用户交互
)。总之,我不会把存储用户状态或用户相关数据更改称为"性能损失",而是为了正确的目标使用可用资源。与HTTP cookie结合使用,在会话超时后,因为cookie会有某种标识符,您的服务器端逻辑应该能够恢复相关数据并将其再次存储在会话状态中。
无论如何,如果您担心这种解决方案的性能影响,您可以切换到n层架构,并且,例如:
一台机器将有一个基于Windows Communication foundation的服务来实现业务和数据访问。
一台托管ASP的机器。NET Web Forms应用程序。
在这种情况下,人们浏览你的ASP。. NET应用程序用户界面将不会遭受定期更新会话相关数据到某些数据存储的副作用,因为这将在单独的进程或机器中完成。