如何通过一次只访问一个用户来限制页面。使用asp.net我可以使用global.asax,还有其他任何方法可以限制,如果一个用户访问该页面,另一个用户无法访问该页面。我们必须给出一个用户正在访问该页面的消息。可能吗。你可以帮我或提供一些参考。
答案 0 :(得分:2)
虽然可能有很多更好的方法来处理这类问题,但我会假设你确实需要这个。
我会做什么:
使您的应用程序在加载页面时(当它没有“锁定”时),它会记录到页面已加载并“锁定”它的数据库。在实际页面中,我会有一些AJAX来每隔5-15秒不断轮询Web服务器,告诉您的应用程序用户仍在页面上。然后进行设置,以便在从最后一次AJAX调用保存到数据库的时间开始5-15秒后页面解锁。
同样,我真的怀疑在这样的问题上有更好的方法,但这是对你的问题的直接回答
答案 1 :(得分:1)
基于此:
是的,jupaol,它取决于帐户,在我的网络应用程序中,一个报告只需要批准一个用户,但批准权限有两个用户。如果他们两个都访问同一页面并一次批准,那将是一团糟。这里我不使用数据库。
问题与并发有关,有几种方法可以解决这样的问题,例如最简单的方法是使用optimistic concurrency。即使您没有使用数据库,也可以模拟它。
您应该将批准者的结果存储在某个地方,以便将报告标记为已批准,请记住您应该能够执行以下操作:
Mutex
或类似内容)并将报告标记为已验证如果您想要一个响应更快的应用程序(RIA),您可能需要考虑以下方法:
也许这是最糟糕的方法,但它仍然是一个选项,您可以在用户请求您的页面时保持日志跟踪,然后在后续请求中检查日志是否仍然有效,如果不是,则重定向到指示页面正在使用中的另一个页面,否则允许访问该页面。我认为这是一种容易出错的方法,因为您将依赖这种简单的验证来防止系统中的不一致,此外您还会遇到以下方法中描述的轮询问题
使用AJAX轮询服务中的数据,检查报告是否已获批准。也许这是实现这一目标的最简单方法,但不建议这样做,因为你会不断地轮询你的服务器,最终你会遇到可扩展性问题
您可以使用Comet在发生服务器事件时通知浏览器(客户端),在这种情况下,当您的报告获得批准时。此方法的问题是您必须与服务器保持打开的连接才能收到通知。
最近的方法和最推荐的方法是使用Web Sockets,这是StackOverflow中用于实时获取通知的技术。