用户来自ASP.Net但为NULL的URL

本文关键字:NULL URL 但为 Net ASP 用户 | 更新日期: 2023-09-27 18:28:59

我想知道用户来自哪个url。所以,我使用

Uri MyUrl = Request.UrlReferrer;

但是当我从MyUrl:中只得到空值时

我有两个项目,第一个是我的aspx页面,第二个是用GET参数重定向到第一个项目页面。但当第二个项目重定向到第一个项目时,我有:

对象引用未设置为对象的实例

我的第二个测试项目很简单:

 protected void Page_Load(object sender, EventArgs e)
    {
        Response.Redirect("http://localhost:54287/go.aspx?id=DEFAULT");
    }

第一个也是主要项目:

 protected void Page_Load(object sender, EventArgs e)
    {
        //Request.ServerVariables('http_referer');
        //  Request.ServerVariables;
        string id = Request.QueryString["id"];
        if (id != null)
        {
         Uri MyUrl = Request.UrlReferrer;
                Console.WriteLine(MyUrl);
                Response.Write("Referrer URL : " + MyUrl.AbsolutePath);
        }
    }

错误:Response.Write("Referrer URL:"+MyUrl.AbsolutePath);

用户来自ASP.Net但为NULL的URL

好的,有几个错误:

您的代码:

Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
Response.Write("Referrer URL : " + MyUrl.AbsolutePath);

在上面的代码中,您得到了一个NullReferenceException,因为MyUrlnull

UrlReferer可能为空,因此您必须检查以下内容:

Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
if (MyUrl != null)
   Response.Write("Referrer URL : " + MyUrl.AbsolutePath);

此外,你永远无法确保UrlReferer可以有值,如果用户来自另一个网站,你不知道这个网站是否会提供这个值,所以你必须首先假设推荐人是null(总之,永远不要相信它)。

其次,当您在服务器端运行的代码上使用Response.Redirect时,您不知道什么是referr。

我发现这个问题,这个问题将帮助你更好地理解。

UrlReferrer基于浏览器应该发送的HTTP_REFERER标头。但是,就像所有留给客户的事情一样,它是可变的。

我知道一些"安全"套件(比如Norton的Internet security)会去掉这个标题,因为它有助于跟踪用户行为。此外,我相信也有一些Firefox扩展可以做同样的事情。

最重要的是,你不应该信任它。只需将url附加到GET字符串中,然后根据它进行重定向。

参考:堆叠流参考