charminglee

关于UrlReferrer

    这个东东也值得记录一下了。
    1。防止盗链和直接打开某页。
   
1protected void Page_Load(object sender, EventArgs e)
2    {
                      if(Request.UrlReferrer==null)
                      {
                            //Response.End();
                      }
                      if(Request.UrlReferrer.Authority!=Request.Url.Authority)
                      {
                           // Response.End();
                      }
3        7}
   
 2。返回上页的用法引用一篇他人的文章。
    有时进入管理页面时,session和cookie消失时,要返回登录页面,登录后我们仍想返回刚才管理操作的这个页面.这样很方便.可以用Request的一个属性实现Request.UrlReferrer 

获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。

当一个页面跳到此页面时,它就会记录跳到这个页面的URL,然后利用这个URL返回.小技巧,记录下来

1protected void Page_Load(object sender, EventArgs e)
2    {
3        ViewState["UrlReferrer"= Request.UrlReferrer.ToString();
4
5        HyperLink1.NavigateUrl = (string)ViewState["UrlReferrer"];
6        Response.Write((string)ViewState["UrlReferrer"]);
7    }

    3.关于UrlReferrer 的小Bug     
    HttpRequest的UrlReferrerReferer Header是同宗的

在 IE 中,访问 http://localhost\1.htm (注意这里故意是 \ 而不是 / , / 是没有问题的。http://localhost\1.htm 在 Mozilla Firefox 中认为是错误的,但是IE认为是正确的。)这样地页面没问题,但是,如果这个页面1.htm中的一个页面链接是连接到一个ASPX页面。
假设 1.aspx
1.aspx 使用到这样一行代码       Request.UrlReferrer
就会报错误 ,错误如下:

无效的 URI: 无法分析主机名。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.UriFormatException: 无效的 URI: 无法分析主机名。

[UriFormatException: 无效的 URI: 无法分析主机名。]
   System.Uri.Parse() +2504
   System.Uri..ctor(String uriString, Boolean dontEscape) +153
   System.Uri..ctor(String uriString) +7
   System.Web.HttpRequest.get_UrlReferrer() +156
   ASP._1_aspx.Page_Load(Object src, EventArgs e) in D:\WEBSITE\Community\1.aspx:6
   System.Web.UI.Control.OnLoad(EventArgs e) +55
   System.Web.UI.Control.LoadRecursive() +27
   System.Web.UI.Page.ProcessRequestMain() +750
版本信息: Microsoft .NET Framework 版本:1.1.4322.2032; ASP.NET 版本:1.1.4322.2032

请求 1.aspx 页面的时候,发送的Http头信息的部分如下:

GET /1.aspx HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://localhost\1.htm
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.40607)

显然微软的System.Uri.Parse() 中,认为URL中 / 才是正确的,而 \ 是错误的。

以上Bug,就是通过 ieHTTPHeaders  查出来了.推荐使用 ieHTTPHeaders http://blog.joycode.com/ghj/archive/2004/10/15/35580.aspx



   

posted on 2006-04-21 10:30  charming  阅读(1642)  评论(0)    收藏  举报

导航