检查用户是否已登录

时间:2013-10-05 09:25:33

标签: c# asp.net

我有一个gridview,其中一列包含图像。我使用灯箱来缩放点击的图像。但是,当我右键单击图像并选择“在新选项卡中打开链接”选项时,图像将在新选项卡中打开。那不是问题。

之后我按下退出按钮。现在我复制该图像链接并将其粘贴到地址栏上,同样的图片打开了。我想首先检查用户是否已登录,然后如果他已登录则打开图像,否则不打开。 gridview的所有图像都存储在名为“product images”的文件夹中。

我已经在使用gridview的页面上检查登录状态。 告诉我该怎么做。

2 个答案:

答案 0 :(得分:1)

您的问题是您的图片未应用安全修整。

静态资源不遵循与asp.net页面相同的路径,因此不会对图像应用安全修整。

只要您的web.config文件不允许该图像文件夹中的未授权用户,您可以通过设置web.config =>来处理该问题。 system.webServer =>的模块

<modules runAllManagedModulesForAllRequests="true">

...但这意味着所有资源都将通过asp.net管道路由,这可能会产生性能问题。

回答您的问题(我的解决方案):

我实际上会采用另一种方式,这将会更加困难,这将是:

  • 使用 iis请求过滤(=&gt; 隐藏的细分 =&gt; 禁止访问该文件夹),使文件夹产品图片对任何用户都不可见< /强>
  • 然后创建一个自定义的http处理(.ashx文件),其中我将图像名称作为参数。 ProcessRequest中的该处理程序将获取image参数,打开特定文件并将图像中的数据流式传输到响应。)
  • 在安全修整下处理可能很容易,只要它通过ASP.NET管道,因此未登录的用户将无法访问处理程序。性能会有些慢,但仅适用于那些特定的图像。另请注意,您应该更改对图像的任何直接调用。例如,如果您有 src ='/ product images / imageA.png',则应更改为 src ='/ ImagesHandler.ashx?image = imageA.png'

在您对难度和Abhishek Punj的回答后,我想提一下:

  • 我的解决方案不需要为每种文件类型注册处理程序(如果之后添加.jpg文件类型并且尚未注册它会怎么样?)。

  • 此外,即使Abhishek Punj回答你仍然需要流 从图像文件到响应的图像数据。

  • 此外,使用我的解决方案,您无需自定义检查 ProcessRequest的用户权限,但ASP.NET安全修整 会处理它。

  • 此外,我的解决方案试图“保护文件夹” Abhishek Punj试图“全球保护文件类型”。

  • 但最重要的,Abhishek Punj回答意味着所有图片都会通过ASP.NET管道,这意味着如果你有任何 登录表单上的图像,例如,它们不会显示给用户 也好了!毕竟,如果你想要所有的图像文件类型,那你为什么不使用runAllManagedModulesForAllRequests =“true”,而不进行任何编码?

答案 1 :(得分:0)

您可以创建一个新的处理程序并在IIS中将其注册为您的映像文件所具有的扩展类型。在开始请求的处理程序中,您可以使用表单身份验证设置的原则检查用户是否已通过身份验证。这不会触发所有静态文件,因此比George提到的解决方案表现更好。

然而,您将面临另外一个问题..所有静态资源都被浏览器缓存,因此它可能根本不会向服务器发送请求,只是在没有身份验证的情况下将图像显示给用户。 / p>

要解决此问题,您需要在第一步中编写的自定义处理程序的响应中设置no-cache标头,以便浏览器缓存响应并始终命中服务器以提供响应。 / p>

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

希望这能为你提供理想的方向。

编辑:基于乔治提出的观点

runAllManagedModulesForAllRequests =“true”不仅会触发所有图像,还会触发所有CSS文件和javascript文件......因此会增加开销。

如果您只想在特定目录中专门限制文件,一种非常简单的方法是将该目录作为配置中的密钥提及,并进行正则表达式比较以检查该请求是否需要进行身份验证。这也可以扩展为满足各种文件或目录,根据需要使用自定义配置部分包含或限制。

对于使用其他文件扩展名的请求注册处理程序,这被认为只需几秒钟......这不是一项痛苦的任务。