【问题标题】:ASP.NET MVC Session State TimeoutASP.NET MVC 会话状态超时
【发布时间】:2015-04-30 16:22:32
【问题描述】:
鉴于会话状态在 ASP.NET MVC 中为 not reccomended。我试图了解在什么情况下使用会话。我知道使用 TempData 会创建一个会话,但还有哪些其他情况,我如何配置会话状态超时以提高安全性是否重要?
<sessionState cookieName="s" timeout="20" />
【问题讨论】:
标签:
c#
asp.net
asp.net-mvc
session
session-state
【解决方案1】:
您引用的已接受答案部分说明
这往往会导致过度使用会话,在会话中填充“当前”变量,以指示当前正在与之交互的对象是什么。这种过度使用反过来又使应用程序非常依赖于状态,并且更难以确定预期的行为(“这个变量是否已填充?”“我有当前的订单 ID 吗?”)。
MVC 的构建理念是,您的网站是信息逻辑模型的视图。它鼓励通过使用简单的控制器来响应具有作为 HTTP 请求的一部分传递的关键信息的操作来进行无状态操作
当您的网站需要将某些内容与特定用户联系起来时,会话并不是一件坏事,无论是出于安全还是个性化目的。为此目的使用会话是正常的、预期的和正常的。
您应该避免在会话中填充您在 Web 应用程序中的任何位置可能需要的任何和所有信息。花时间学习和理解 MVC 架构,并倾向于在实际呈现给定页面时加载呈现给定页面所需的数据。仅缓存加载成本相对较高或在许多/所有页面上都需要的内容。
如何配置会话状态超时以提高安全性是否重要?
会话超时时间的主要问题是会话劫持攻击,它允许中间人截取会话信息并在黑客控制下从不同设备控制会话。对于大多数应用程序,我认为默认会话超时没有任何问题。
另一个问题是人们离开他们的设备,无人看管。这样做的人比您的网站更担心安全问题。
【解决方案2】:
正如您所提到的,确实不建议在 mvc 中使用 session 。因为,在 mvc 中,identity 用于在 identity 中不需要 session。数据存储在 profile 中。
当您想要维护多个页面或多个控制器的值时,会在这种情况下使用会话。例如,登录后,您将维护用户名并保留它,直到您留在应用程序中。而 tempdata 用于保存或维护当前操作的值,并在下一个操作后丢弃该值
会话状态与安全无关,因此出于安全考虑,无需更改会话超时值。