如何限制网站的某个部分,以便一次只能由一台计算机查看?
使用C#Visual Studio 2008和SQL Server 2005。
-
一个数据库服务器
-
一个网络服务器
-
三个客户
-
网页名称是
alpha
。 网站名称是mysite
。
我希望一次只有一个客户端可以查看页面alpha
。 如果正在查看该页面而另一台计算机正在尝试查看同一页面,则拒绝访问。
有没有办法配置IIS,以限制连接到特定页面的计算机?
是否可以通过使用静态类来实现这一点,以便只生成此类的一个实例,而另一个实例生成ERROR?
怎么做到这一点?
请注意,有很多页面。 我只想限制人们对此页面的看法。
您描述的方式没有内置限制,我不确定静态类应该提供什么帮助。
我会使用一个应用程序变量 ,存储第一个客户端的IP地址和某种超时,并以这种方式在您要保护的页面上设置/检查它。
由于您无法区分刷新页面与打开另一个选项卡的同一浏览器,我认为没有办法使这样的方案有效。
你为什么需要这个? 也许还有其他更好的选择?
简短的回答是:我认为你不能这样做。
答案不是那么简短:您可以通过检查Request.UserHostAddress
来检查请求来自哪个计算机/ IP地址,暂时将该IP地址存储在“某处”并阻止再次将该页面显示到同一IP地址。 但是这种方法存在一些问题:
- 您将不得不清除“活动”客户端IP地址列表
- 如果他们位于防火墙/代理/等之后,您将无法区分不同的用户/计算机(它们将显示与您的Web应用程序相同的IP地址)
我认为理论上它是可能的。
您可以使用身份validation+ cookies + javascript执行此操作。
使用身份validation可以让用户登录并维护每个用户所服务的页面的状态。 在该浏览器中设置cookie以允许不必再次登录。
现在,您可以在javascript中使用onUnLoad事件(或任何或AJAX作为超时时保持活动+擦除DOM等)来清除(或维护)该用户的特定页面的状态。
每当用户请求页面时,检查他是否已登录并打开该页面。 如果状态显示他已打开,则可以拒绝并发视图。 如果他使用其他浏览器,您可以要求再次登录,因为缺少cookie等。
当然,其他约束可能会阻止您使用它。
免责声明:我自己没有尝试过,可能有办法解决这个问题。
执行此操作的低效方法可能是将每个用户的ip和当前页面放入数据库,然后针对该ip的所有后续请求进行查询。 将onUnload事件添加到每个从数据库中删除已卸载页面的页面。