我会尝试解释我的情况和我想做的事情。没有任何困难和罕见的情况,但我无法在互联网上找到任何相关问题或文章。
我在 ASP.NET MVC 5 上创建了一个Web应用程序。用户不会直接进入我的应用程序。用户将输入对CentralInformationSystem.com
的说法。然后他们必须以支持的方式登录本网站。登录后,他们将看到一个应用程序列表。将有允许用于签名用户的应用程序。其中一个应用程序将是我在Asp.Net MVC
开发的应用程序。
重点是我们的应用程序不会在其他选项卡或当前选项卡中打开等等。我们的应用程序将在当前标签内的一个大iframe中打开。
其他要点是我们的应用程序,CentralInformationSystem.com
属于其他域。
另一个问题当然是,我现在如何哪个用户已登录?答案是,CentralInformationSystem.com
将带有查询字符串的加密数据发送到我们的网站。例如,URL将如下所示:
MyMvcApplication /家庭/索引?令牌= jkndid758adsai == qwdbqwiudhqwadoqidwqq = wqdiqw
另请注意,他们总是会发送不同的令牌。
之后,我将解密令牌并找到它所属的用户。另请注意,一个令牌只能使用一次。
1。我的申请是什么类型的申请?
用户将进入非常大的形式。它实际上可能需要3-4个小时。所以,我尝试过某种类型的向导逻辑。输入数据的某些部分后,我会将它们插入数据库,从数据库中获取标识符并将其存储在某个地方并将用户带到下一个级别,依此类推。
2。我想要实现什么?
我想创建这样的逻辑:一些标识符变量值必须存储在永远不必过期的地方,直到用户关闭浏览器或注销。我不想将会话超时时间增加到5-6小时。
3。如果用户在多个标签中打开我的应用程序会怎样?
除了2我还有一个问题,用户可以在iframe中打开我的网站多个标签。我知道,在Asp.net
我们可以根据每个标签区分会话。但是,我不想在会话中存储数据,因为用户可以在20分钟或4小时后停止填写表单。另外,我不能使用cookie,因为所有标签的cookie都是相同的。
我的另一个选择是,将带有加密值的隐藏输入注入所有视图。但是,我无法找到如何自动将这些数据添加到每个视图。而且,对我而言,它似乎并不是最有效的方式。
另一个逻辑是阻止用户使用不同的标记在多个选项卡中打开相同的应用程序。但是,也不知道如何实现这一点。
其他:
我几乎阅读了所有文章和问题/答案。我知道如何让它发挥作用。但是,我想要最好的方法。我的方法都没有效率。
答案 0 :(得分:2)
使用您自己的持久会话概念,该概念由页面上的隐藏输入标识,并且不会过期,或者至少在很长一段时间内不会过期。让所有控制器派生自单个基本控制器,并使用OnActionExecuted将结果“key”添加到ViewBag,当结果是ViewResult时(部分视图或JSON等不需要它)。然后,每个页面都可以访问ViewBag并创建隐藏的输入 - 可能您想为此使用局部视图,并且只需在每个页面上包含部分视图。将与此会话关联的数据存储在数据库中。