【问题标题】:how to keep a session alive using a shared server? ASP.NET / MVC如何使用共享服务器保持会话活动? ASP.NET/MVC
【发布时间】:2014-09-22 17:35:44
【问题描述】:

目前我的 Web 应用程序托管在具有以下配置 (web.config) 的共享服务器 (asphostcentral) 中:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" cookieless="UseCookies">

一段时间后,会话到期,用户被重定向到登录页面并强制再次输入他们的凭据。

我从支持人员那里得到的答案是:

由于这是共享服务器,建议不要使用会话状态。 相反,请使用 cookie。你编写cookie的方式非常非常 与 session 类似,只是实现方式不同。

在共享服务器上,服务器上的其他站点可能 影响您的网站会话。

有人可以帮忙吗?您如何实施支持团队提供的解决方案?

【问题讨论】:

  • 感谢您的回答。这就是解决方案:需要 web.config 中的 geekfreeq.ventaur.com/… machineKey。这适用于网络农场场景。

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


【解决方案1】:

建议不要使用会话状态

所以 Ctrl+F 在您的解决方案中并从您的代码中删除所有Session 的痕迹。如果您需要为用户存储一些信息并且这些信息很敏感,您可以将其存储到数据库中并稍后查询,或者使用身份验证 cookie 的 userData 部分。这完全取决于您当前使用会话的方式。

【讨论】:

  • @MuhammadAdeelZahid,因为 Session 让您编写无法很好扩展的有状态应用程序。因为 Session 默认存储在给定 Web 服务器的内存中,这意味着如果您的 AppDomain 被回收(可能随时发生),您将丢失信息。因为如果您在具有许多节点的网络农场中运行,如果您将会话存储在给定节点的内存中,其他节点将无法访问它。在这种情况下,您将不得不使用进程外会话。不应该使用 session 的原因有很多。
  • @DarinDimitrov- 您愿意花时间与我们分享所有可能的原因,例如为什么不使用会话?您可以更新您的答案。谢谢。
  • @nuux,我已经在之前的评论中分享了一些原因。
【解决方案2】:

使用 cookie 代替会话是危险的建议。请不要从字面上理解。 Cookie 可以被客户端读取和伪造,并且有大小限制。

你可以:

  1. 在共享服务器上使用 ASP.NET 会话状态服务器。这样您的网络机器就可以共享会话。
  2. 使用粘性会话
  3. 删除会话的所有用法。您可以将内容存储在数据库或 cookie 中(我不推荐!)

我按顺序推荐这三种解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2011-02-21
    • 2014-11-26
    • 2016-06-17
    • 2012-07-19
    • 2012-11-26
    相关资源
    最近更新 更多