0

使用 C# Visual Studio 2008 和 SQL Server 2005。

  • 一台数据库服务器。

  • 一台网络服务器

  • 三个客户

  • 网页名称是alpha。站点名称是mysite

我希望一次只有一个客户可以查看该页面alpha。如果一个人正在查看该页面,而另一台计算机上的另一个人试图查看同一页面,则访问将被拒绝。

有没有办法配置 IIS 以限制连接到特定页面的计算机?

是否可以通过使用静态类来实现这一点,以便只生成此类的一个实例,而当另一个实例尝试生成错误时?

如何做到这一点?

请注意,有很多页面。我只想限制人们对这个页面的看法。

4

5 回答 5

4

由于您将无法将页面刷新与打开另一个选项卡的同一浏览器区分开来,因此我看不出有任何方法可以使这种方案起作用。

你为什么需要这个?也许还有其他更好的选择?

于 2010-06-20T21:13:17.780 回答
3

您描述的方式没有内置限制,我不确定静态类应该提供什么帮助。

我会使用应用程序变量,存储第一个客户端的 IP 地址和某种超时,然后在您要以这种方式保护的页面上设置/检查它。

于 2010-06-20T19:51:48.273 回答
2

简短的回答是:我不认为你可以做到这一点。

不那么简短的答案是:您可以通过检查来检查请求来自哪台计算机/IP 地址Request.UserHostAddress,暂时将此 IP 地址存储在“某处”并防止再次将页面显示到相同的 IP 地址。但是这种方法存在一些问题:

  • 您有时必须清除“活动”客户端 IP 地址列表
  • 如果他们在防火墙/代理/等后面,您将无法区分不同的用户/计算机(它们都会向您的 Web 应用程序显示相同的 IP 地址)
于 2010-06-20T21:17:38.650 回答
1

我想理论上是可以的。

您可以使用身份验证 + cookie + javascript 来做到这一点。

使用身份验证让用户登录并维护每个用户提供的页面的状态。在该浏览器中设置 cookie 以允许不必再次登录。

现在您可以在 javascript 中使用 onUnLoad 事件(或其他任何事件或 AJAX 作为保持活动状态 + 超时擦除 DOM 等)来清除(或维护)该用户的特定页面的状态。

每当用户请求页面时,检查他是否已登录并打开该页面。如果状态显示他已打开,您可以拒绝并发视图。如果他使用不同的浏览器,您可以要求重新登录,因为缺少 cookie 等。

当然,其他约束可能会阻止您使用它。

免责声明:我自己没有尝试过,可能有办法解决这个问题。

于 2010-06-20T21:39:49.480 回答
0

一种低效的方法可能是将每个用户的 ip 和当前页面放入数据库,然后针对该 ip 查询所有后续请求。将 onUnload 事件添加到从数据库中删除已卸载页面的每个页面。

于 2010-06-21T05:52:52.007 回答