2012-02-18 81 views
1

目前我的web应用程序在共享服务器(asphostcentral)具有以下配置(web.config中)主办:如何使用共享服务器使会话保持活动状态? ASP.NET/MVC

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

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

我从支持得到的答案是:

因为这是一个共享服务器,建议您不要使用会话状态。 请改用cookie。你编写Cookie的方式非常非常类似于会话,其实现方式与 类似。

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

任何人都可以协助吗?您是否如何实施支持团队提供的解决方案?

+0

感谢您的回答。这是解决方案:http://geekfreeq.ventaur.com/aspnet-remember-me-option-forms-authentication-not-working/ machineKey内部web.config需要。这适用于网站场景。 – IngAbraham 2012-02-23 02:13:26

回答

2

建议您不要使用会话状态

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

+0

有什么具体原因? – 2012-02-18 19:04:40

+2

@MuhammadAdeelZahid,因为Session会让你编写不能很好地扩展的有状态应用程序。因为Session默认存储在给定Web服务器的内存中,这意味着如果您的AppDomain被回收(可能随时发生),您将丢失信息。因为如果您在具有多个节点的Web场中运行,如果将Session存储在给定节点的内存中,则其他节点将无法访问它。在这种情况下,你将不得不使用一个out-proc会话。有很多原因,你不应该使用会话。 – 2012-02-18 21:31:09

+0

@ DarinDimitrov-你需要时间,让你分享我们所有可能的原因,为什么不使用会话?你可以更新你的答案。谢谢。 – Mubarek 2012-02-18 22:14:59

0

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

您可以:

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

我推荐这三种解决方案。

相关问题