3

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

4

2 回答 2

2

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

我会做什么:

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

同样,我真的怀疑有更好的方法来解决这样的问题,但这是对您问题的直接回答

于 2012-07-04T04:47:29.673 回答
1

基于此:

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

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

您应该将批准者的结果存储在某处,以便将报告标记为已批准,考虑到这一点,您应该能够执行以下操作:

  1. 在渲染页面之前获取最新的报告状态
  2. 如果报告没有被批准,正常渲染
  3. 如果报告在几秒钟前获得批准,则以只读模式报告批准它的人(或类似方法)
  4. 向ChangeStatus方法添加验证,在此方法中执行以下操作:
    1. 获取当前报告的最新状态
    2. 如果报告仍未验证,则阻止线程(您可以使用 aMutex或类似的)并将报告标记为验证它
    3. 如果报告已经验证它,引发域异常并在您的页面中正确处理它(可能以只读模式呈现页面,说明报告已经验证它)

如果您想要一个响应速度更快的应用程序 (RIA),您可能需要考虑以下方法:

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

  • 使用 AJAX 轮询来自服务的数据,检查报告是否已被批准。也许这是完成此任务的最简单方法,但不推荐这样做,因为您会不断轮询服务器,最终会遇到可伸缩性问题

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

  • 最后一种方法也是目前最推荐的方法是使用Web Sockets,这是 StackOverflow 中用于实时获取通知的技术。

于 2012-07-04T04:31:59.230 回答