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

Best practice for persisting User State in special kind of Asp.Net Mvc application

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

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

中开发的应用程序

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

其他要点是我们的应用,CentralInformationSystem.com属于其他领域。

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

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

另请记住,他们将始终发送不同的令牌。

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

1.我的申请是什么类型的申请?

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

2。我想达到什么目的?

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

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

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

我的另一个选择是,向所有视图注入具有加密值的隐藏输入。但是,我找不到如何将这些数据自动添加到每个视图中。另外,在我看来这不是最有效的方法。

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

补充:

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

使用您自己的持久会话概念,该会话由页面上的隐藏输入标识并且不会过期,或者至少不会在很长时间内过期。让所有控制器都派生自单个基本控制器,并在结果为 ViewResult 时使用 OnActionExecuted 将会话 "key" 添加到 ViewBag(局部视图或 JSON 不需要它), ETC)。然后每个页面都可以访问 ViewBag 并创建隐藏的输入 - 可能您想为此使用局部视图并简单地在每个页面上包含局部视图。将与此会话关联的数据存储在数据库中。