c# - ASP.NET : How to prevent opening same site a few times in parallel?

标签 c# .net session multiple-instances

我是 ASP 的新手,我遇到过最糟糕的开发人员噩梦:我收到了被解雇的大型 ASP.NET 项目,我必须对其进行一些更改。其中一项更改是防止在一次 Active Directory 登录时多次打开同一站点(不同的选项卡、浏览器等...) 正如我注意到该应用程序正在使用 session 。使用 session 来防止同一站点的多个实例有什么想法吗?

最佳答案

这是一个想法。使用带有 GUID 的隐藏字段,该字段将由服务器为每次页面加载随机生成。当请求到达服务器时,它会检查 GUID 是否是上次生成的。如果它不同或为空(当 session 处于事件状态时)- 重定向到某个页面说访问被拒绝(此处没有新的 GUID)。如果正确,则提供请求的页面。这样做的小问题是,如果有人关闭浏览器并重新打开它,他/她在尝试再次使用您的应用程序时将被拒绝访问。为了最大限度地减少您需要将 session 超时降低到 1 分钟并使用 AJAX asp:Timer 来保持 session 事件。请记住将 keep alive 调用(以及任何其他 AJAX 调用)排除在 GUID 生成/验证管道之外。当然, session 结束会重置该过程。鼓励用户正确注销也是一件好事。

虽然它的保护级别比永久连接弱,但这是实现起来相对简单的解决方案。不过,对于非技术最终用户来说应该足够了——取决于你的“听众”。但即使对于了解该机制的人来说,使用两个应用程序“实例”也会变得非常困难。

如果你真的需要,就去做吧。总的来说,我同意 Marc 的观点,即不应以这种方式限制网络应用程序。或许是受过教育的人的要求吧?

关于c# - ASP.NET : How to prevent opening same site a few times in parallel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392180/

相关文章:

c# - 如何根据标题高度定位 WPF Expander?

javascript - 为什么我对 web.api 的请求被长时间运行的 Controller 代码阻止?

c# - WPF:MVVM 和编辑分层数据

.net - 如何阻止 Json.NET JArray.Parse 更改 UTC 日期?

c# - Silverlight 独立存储最佳实践?

php - 在选择菜单中获取mysql数据库的值

c# - C# 中的项目属性

c# - 从缓存中延迟加载对象图部分的推荐模式

c# - 如何捕捉程序关闭以释放资源?

postgresql - 我想根据从 View 中获取的数据创建一个表