ASP.NET:如何将页面访问限制为只有一个用户?

时间:2012-07-04 04:13:59

标签: asp.net

如何通过一次只访问一个用户来限制页面。使用asp.net我可以使用global.asax,还有其他任何方法可以限制,如果一个用户访问该页面,另一个用户无法访问该页面。我们必须给出一个用户正在访问该页面的消息。可能吗。你可以帮我或提供一些参考。

2 个答案:

答案 0 :(得分:2)

虽然可能有很多更好的方法来处理这类问题,但我会假设你确实需要这个。

我会做什么:

使您的应用程序在加载页面时(当它没有“锁定”时),它会记录到页面已加载并“锁定”它的数据库。在实际页面中,我会有一些AJAX来每隔5-15秒不断轮询Web服务器,告诉您的应用程序用户仍在页面上。然后进行设置,以便在从最后一次AJAX调用保存到数据库的时间开始5-15秒后页面解锁。

同样,我真的怀疑在这样的问题上有更好的方法,但这是对你的问题的直接回答

答案 1 :(得分:1)

基于此:

  

是的,jupaol,它取决于帐户,在我的网络应用程序中,一个报告只需要批准一个用户,但批准权限有两个用户。如果他们两个都访问同一页面并一次批准,那将是一团糟。这里我不使用数据库。

问题与并发有关,有几种方法可以解决这样的问题,例如最简单的方法是使用optimistic concurrency。即使您没有使用数据库,也可以模拟它。

您应该将批准者的结果存储在某个地方,以便将报告标记为已批准,请记住您应该能够执行以下操作:

  1. 在呈现页面之前获取最新的报告状态
  2. 如果报告未获批准,则正常呈现
  3. 如果报告在几秒钟前获得批准,请以只读模式呈现,以报告批准该报告的人(或类似方法)
  4. ChangeStatus 方法中添加验证,在此方法中执行以下操作:
    1. 获取当前报告的最新状态
    2. 如果报告仍未经过验证,则阻止该主题(您可以使用Mutex或类似内容)并将报告标记为已验证
    3. 如果报告已经对其进行了验证,请提出域异常并在页面中正确处理(可能以只读模式呈现页面,说明报告已经对其进行了验证)
  5. 如果您想要一个响应更快的应用程序(RIA),您可能需要考虑以下方法:

    • 也许这是最糟糕的方法,但它仍然是一个选项,您可以在用户请求您的页面时保持日志跟踪,然后在后续请求中检查日志是否仍然有效,如果不是,则重定向到指示页面正在使用中的另一个页面,否则允许访问该页面。我认为这是一种容易出错的方法,因为您将依赖这种简单的验证来防止系统中的不一致,此外您还会遇到以下方法中描述的轮询问题

    • 使用AJAX轮询服务中的数据,检查报告是否已获批准。也许这是实现这一目标的最简单方法,但不建议这样做,因为你会不断地轮询你的服务器,最终你会遇到可扩展性问题

    • 您可以使用Comet在发生服务器事件时通知浏览器(客户端),在这种情况下,当您的报告获得批准时。此方法的问题是您必须与服务器保持打开的连接才能收到通知。

    • 最近的方法和最推荐的方法是使用Web Sockets,这是StackOverflow中用于实时获取通知的技术。