c# - 在特殊类型的 Asp.Net Mvc 应用程序中持久保存用户状态的最佳实践

标签 c# asp.net asp.net-mvc asp.net-mvc-4 cookies

我会尽力解释我的情况以及我想做什么。没有什么困难和罕见的情况,但是我在网上找不到任何相关的问题或文章。

我在 ASP.NET MVC 5 上创建了一个 Web 应用程序。用户不会直接进入我的应用程序。用户将输入 CentralInformationSystem.com。然后他们必须通过受支持的方式之一登录该网站。登录后,他们将看到应用程序列表。将有已允许签名用户使用的应用程序。我的应用程序就是其中之一,它是在 Asp.Net MVC 中开发的。

重点是我们的应用程序不会在其他选项卡或当前选项卡等中打开。我们的应用程序将在当前选项卡内的大 iframe 中打开。

其他要点是我们的应用程序和 CentralInformationSystem.com 属于其他域。

当然,另一个问题是,我现在如何才能哪个用户已登录?答案是,CentralInformationSystem.com 将带有查询字符串的加密数据发送到我们的网站。例如,URL 将如下所示:

MyMvcApplication/Home/Index?Token=jkndid758adsai==qwdbqwiudhqwadoqidwqq=wqdiqw

另请记住,他们始终会发送不同的 token 。

之后,我将解密 token 并找到它属于哪个用户。另请记住,一个 token 只能使用一次。

1。我的应用程序是什么类型的应用程序?

用户将输入非常大的表格。实际上可能需要大约 3-4 小时。所以,我尝试了某种类型的向导逻辑。输入部分数据后,我会将它们插入数据库,从数据库中获取标识符并将其存储在某个地方,并将用户带到下一个级别等等。

2。我想要实现什么?

我想创建这样的逻辑,一些标识符变量值必须存储在这样的位置:永远不会过期直到用户关闭浏览器或注销。我不想将 session 超时增加到 5-6 小时。

3。如果用户在多个选项卡中打开我的应用程序怎么办?

除了 2 之外,我还有一个问题,即用户可以在 iframe 中打开我的网站多个选项卡。我知道,在 Asp.net 中,我们可以为每个选项卡设置不同的 session 。但是,我不想在 session 中存储数据,因为用户可以在 20 分钟或 4 小时后停止填写表单。另外,我无法使用 cookie,因为所有选项卡的 cookie 都是相同的。

我的另一个选择是,将带有加密值的隐藏输入注入(inject)到所有 View 中。但是,我找不到如何自动将这些数据添加到每个 View 中。而且,在我看来这并不是最有效的方法。

另一种逻辑是防止用户使用不同的 token 在多个选项卡中打开同一应用程序。但是,也不知道如何实现这一点。

附加:

我已阅读几乎所有文章和问题/答案。我知道如何让它发挥作用。但是,我想要最好的方法。我的两种方法都没有效率。

最佳答案

使用您自己的持久 session 概念,该 session 由页面上的隐藏输入标识并且不会过期,或者至少不会在很长一段时间内过期。让所有 Controller 都派生自单个基本 Controller ,并在结果是 ViewResult 时使用 OnActionExecuted 将 session “ key ”添加到 ViewBag(对于部分 View 或 JSON 等,您不需要它)。然后,每个页面都可以访问 ViewBag 并创建隐藏输入 - 可能您希望为此使用部分 View ,并且只需在每个页面上包含部分 View 即可。将与此 session 关联的数据存储在数据库中。

关于c# - 在特殊类型的 Asp.Net Mvc 应用程序中持久保存用户状态的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30273517/

相关文章:

c# - 在 PowerShell 中提供 C# 抽象类的实现

c# - 尝试在 C# 中使 waveout 工作时 vhost.exe 崩溃

c# - 重置在组框中以编程方式创建的标签的值

javascript - 需要帮助将 ASP.net 切换到 HTTPS

c# - 以编程方式启动 ASP.NET Core Web-API

c# - 无法设置类型的属性,因为集合已设置为 EntityCollection

java - ajax MVc return从return中选择单个div。/

c# - Xamarin.iOS 版本 Appstore 应用程序中的人类可读异常处理

asp.net - FindControl 在页面中查找控件

c# - 为什么我不能将资源用作带有 DataAnnotations 的 ErrorMessage?