IHttpHandler防盗链!我的资源只有我的用户才能下载
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-04-11
昨天也提到了IHttpHandler接口主要有一个IsReusable属性和一个ProcessRequest方法,利用这个方法我们可以处理很多事情的,昨天我们利用了这个方法给图片动态添加了水印,今天我再来展示另一种用法。 大家查看一个msdn,可以看到它的声明如下:Visual Basic(声明) Sub ProcessRequest ( _ context As HttpContext _ ) Visual Basic(用法) Dim instance As IHttpHandler Dim context As HttpContext instance.ProcessRequest(context) C# void ProcessRequest ( HttpContext context ) 注意这个HttpContext对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。 有了它我们就方便多了,因为我们的下载资源一般都会有一个下载介绍(假设为details.aspx?id=***),用户查看介绍之后,如果愿意下载,就会点击下载链接,这个链接也是一个页面(假设为download.aspx?id=***),我们就可以得出结论,只要是用户通过我们的网站下载这些资源,那么在下载资源之前访问那个页面(简称前导页,下同)一定是details.aspx,因此我们就可以得出结论只要是下载之前的前导页不是details.aspx这个页面,那个这个下载请求一定是别的网站盗链(其实还可以放宽一点,在下载之前的前导页一定是本站的页面,也还可以要求更紧一点,下载之前访问的页面的id值一定要与下载的id值一致,这就看大家的实际要求了)! 有了这个推论之后,我们就可以动手写代码了: using System; using System.IO; using System.Web; /// <summary> /// 说明:DownloadHandler是一个防盗链的类,它可以防止本站资源被别的网站盗用 /// 日期:2010-1-11 /// 首发地址:http://www.17aspx.com /// </summary> public class DownloadHandler:IHttpHandler { public DownloadHandler() { // // TODO: 在此处添加构造函数逻辑 // } #region IHttpHandler 成员 /// <summary> /// 指示IHttpHandler 实例是否可再次使用 /// </summary> public bool IsReusable { get { return true; } } /// <summary> /// 处理请求的方法 /// </summary> /// <param name="context">它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。</param> public void ProcessRequest(HttpContext context) { Uri referrerUri = context.Request.UrlReferrer;//获取下载之前访问的那个页面的uri Uri currentUri = context.Request.Url; if (referrerUri == null)//没有前导页,直接访问下载页 { //输出提示,可以根据自身要求完善此处代码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于IHttpHandler防盗链!我的资源只有我的用户才能下载的所有评论