【问题标题】:more persistent than session?比会话更持久?
【发布时间】:2010-06-28 15:07:31
【问题描述】:

我们有一个 asp.net 应用程序,它为跨页面的单个用户使用会话(进程内),现在他们希望保持数据(例如购物车)更加持久,即使他们离开网络应用程序,也意味着关闭浏览器,下次登录时使用相同的ID,他们想要返回数据,ASP.NET中有什么解决方案吗?

如果我们在 sql-server 中保存会话,我认为这是微软的一个选项,但我不确定即使在用户离开应用程序或关闭浏览器后它是否有效

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    会话数据仅在该浏览器会话的生命周期内持续存在。

    答案是不在会话中保存数据,而是将其保存在ShoppingCartShoppingCartItem 表中的数据库中。只要您愿意,它们就会一直存在。

    ShoppingCart 表将有一个 UserID 列,即 FK 到您的 User 表。

    【讨论】:

    • +1 - 会话之外的持久性是一个数据库。保存会话 = 不好。
    【解决方案2】:

    您需要构建一个关系数据库并将条目存储在其中。

    当然,Application 范围高于 Session,但它只会在应用程序池的生命周期内存在。听起来您正在寻找永久存储空间。

    【讨论】:

      【解决方案3】:

      我见过使用 cookie 的购物车系统,有些同时使用 cookie 和数据库。

      仅限 Cookie:Cookie 的“官方”大小为 4K

      Cookie + 数据库:在 cookie 中存储一个 GUID,并将其用作数据库中的引用

      但是...我认为将购物车存储在 cookie 或 cookie/数据库中对用户不是很友好。如果我离开,我更喜欢网站忘记我的购物车。当网站在我同意的情况下存储此类信息时,我很生气。

      【讨论】:

        【解决方案4】:

        您将需要使用数据库来镜像会话中包含的数据,这样数据将在用户注销、重新启动应用程序或重新启动服务器后保留很长时间。您可以将会话对象作为二进制对象保存到 sql-server 中,并在需要时进行序列化/反序列化,但是您如何知道何时进行初始序列化?如果用户关闭浏览器窗口,则很难判断用户何时注销。

        暂时将会话对象存储为单个列可能会起作用,但从长远来看,您可能希望提出适当的关系设计并将数据存储在表中的列中,这样您就可以运行查询和报告反对“进行中的”购物车(例如:人们在最终结账之前让购物车坐多长时间?)。

        正如其他人所提到的,cookie 是另一种选择,但它们存在于客户端,如果他们决定清除 cookie(当用户抱怨浏览器速度慢时,许多技术支持人员似乎将此建议作为第一反应) ,购物车丢失。

        【讨论】:

          猜你喜欢
          • 2012-11-20
          • 2012-03-17
          • 1970-01-01
          • 2013-10-22
          • 2017-04-16
          • 2014-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多