2

我正在为一个体育俱乐部建立一个网站。俱乐部对将他们的主机转移到不同的网络主机不感兴趣,所以我坚持使用当前主机。我将新的 Web 应用程序部署到主机上,但经过几个小时的测试,很明显在登录和会话状态方面有些奇怪。

每当我闲置超过 10 分钟时,我的 MVC 验证令牌就会突然停止解密。我进入 IIS 并将机器密钥设置为静态值,这个问题就消失了,但很明显他们将 ASP.NET 空闲超时设置设置为 10 分钟。这意味着如果站点上没有活动,每 10 分钟 InProc 会话数据就会被销毁。我向主机提交了支持票,但他们不愿意在我的应用程序池中为我更改该设置,并指出“目前无法在服务器上更改该设置,因为增加这可能会影响性能关闭(原文如此)服务器”。

俱乐部有点小,最多有 500 名俱乐部成员,很少有成员会经常访问该网站,所以我几乎可以保证每天会发生多次 10 分钟超时,而且我有会话超时设置为 60 分钟,因此如果站点的唯一用户在给定时间空闲 10 分钟,则让站点清除会话不是一个好主意。

我的第一个想法是使用 SQL 会话存储。我从未使用过它,但我知道它存在。但是,存在的一个警告是我们被限制为 350mb 的 SQL 存储。虽然这可能超出了该站点现在的需要,但我想我们可能会接近达到极限。我预计不会在会话中存储太多数据,仅在与贝宝和购物车交互时存储少量数据(可能这里或那里也有系统消息),所以也许这不是一个大问题?

我们确实有无限的磁盘空间,所以我想到的另一种选择可能是编写一个自定义的基于磁盘的会话存储解决方案。有什么理由这可能不是比 SQL 更好的主意吗?

最后,我有一个完全离谱的“天哪,我不敢相信我正在考虑这样做”的想法,即定期在每个页面上进行 AJAX 调用(例如,每 8 分钟一次)“ ping" 一个非缓存的轻量级 MVC 操作,只是为了让服务器保持活动状态。我认为,这可能会起作用,除了某人的一种情况:

  1. 转到购物页面并创建购物车
  2. 被转移到贝宝
  3. 无论出于何种原因在贝宝屏幕上花费 10 多分钟,而网站上没有其他人
  4. 回来看到他们的购物车消失了。

在这种情况下,我可能只是将购物车移动到数据库中。

所以......想法,评论,建议?对于东道主不让我改变这个设置,我真的很沮丧,我的第一反应是寻找另一个东道主,但正如我之前所说,俱乐部对东道主有一些奇怪的依恋,不想搬到其他地方。

提前致谢!

4

1 回答 1

1

一些想法:

关于问题:会话在负载平衡系统上“丢失”是很常见的。这可以通过移动到单个指定服务器来解决(如果托管公司现在不这样做并提供选项

Cookie 会话:如果您使用 .Net Membership,您可以更改登录过程以使用 cookie。这伴随着一些明显的用户不允许 cookie陷阱。再次,一个考虑。目前在他们希望用户保持登录状态的学校网站上工作。

** 使用 Cookie,您的登录是稳定的,但您的会话不会得到更好的保存。所以你运气不好在会话状态中承载了很多东西。

最终结果是您可以通过 IP 或 Cookie 跟踪用户,但除非这是一个可修复的负载平衡问题,否则您将走向无会话应用程序。

于 2013-01-24T21:54:36.813 回答