【问题标题】:Session Local Storage or Server side session at ASP.NET MVC?ASP.NET MVC 上的会话本地存储或服务器端会话?
【发布时间】:2018-06-23 11:48:29
【问题描述】:

我有一个不包含敏感数据的对象列表(即客户端的小部件的简单设置 5-6 个整数值和 Guid,可能同时有多个小部件)。

目前,我正在使用 ASP.NET MVC 会话。好像不太靠谱。对于存储在其中的某些键,有时会变为空。当我在调试时启动应用程序或网络速度很慢时会发生这种情况。

我可以使用客户端会话存储来存储所有设置吗? (即 sessionStorage 或 localStorage )。

我担心 IIS 重新循环会导致会话被删除 或任何服务器端异常。

编辑

public ActionResult ApplySettingsForDashboard(DashboardCommonSettings settings)
{
  Session[string.Concat("SettingsToApply_",settingsToApply.PanelGuid)]=settings;
}

public DashboardCommonSettings GetSettingsFromSession(string PanelGuid)
{
    var settings = Session[string.Concat("SettingsToApply_",PanelGuid)]
}

欢迎提出意见和建议。 谢谢

【问题讨论】:

  • 客户端 localStorage 保存到用户清除历史记录,它不依赖于任何服务器端事件。所以你可以使用它。但是,它仅将设置保存在一台机器上的一个浏览器中。因此,如果同一用户从另一个地方访问该网站,这些设置将丢失。顺便说一句,你的例会有什么问题?为什么你认为它不可靠?如果你时不时得到 null ,这意味着你使用不正确。
  • 是的,你是对的。应该用什么。我赞成使用服务器端会话。但正如我所描述的,在本地环境中调试或什至在没有调试器的情况下运行应用程序期间,会话值会针对会话内的某些键被删除。结果,当我访问 Session[Guid+"name"]...
  • Sergey Benzenko:你认为 session 的使用在某种程度上是正确的。我正在编辑帖子。继续
  • 1) 尝试明确设置设置变量的类型: var settings = Session[string.Concat("SettingsToApply_",PanelGuid)] as DashboardCommonSettings; 2) 确保您不会在某处破坏会话(进行注销或其他操作)。
  • 不,我明确地对它进行了类型转换。这只是我在代码中所做的一个想法。当前会话期间没有注销。这发生在登录用户上下文中的实时会话期间。不知道为什么。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 session


【解决方案1】:

在cmets的基础上,我想以一种方式回答:尽可能使用Out-Proc Session storage(持久化存储)进行可靠的session存储。它会很慢,因此需要谨慎使用。进程内会话存储在生产环境中特别不可靠。当我们没有敏感数据时,可以选择 localStorage(客户端)。

也欢迎其他答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2015-02-04
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2011-10-03
    相关资源
    最近更新 更多