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

我将尝试解释我的情况和我想做的事情。 没有任何困难和罕见的情况,但我在互联网上找不到任何相关问题或文章。

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

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

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

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

MyMvcApplication /首页/指数?令牌= jkndid758adsai == qwdbqwiudhqwadoqidwqq = wqdiqw

还要记住,他们总是会发送不同的令牌。

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

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

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

2.我想要实现的目标?

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

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

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

我的另一个选择是,为所有视图注入带有加密值的隐藏输入。 但是,我找不到如何自动将这些数据添加到每个视图。 此外,它似乎并不是我最有效的方式。

另一个逻辑是阻止用户使用不同的标记在多个选项卡中打开相同的应用程序。 但是,不要如何实现这一目标。

额外:

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

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