2013-08-26 37 views
1

我想知道 - 用戶來自哪個網址。 所以,我用用戶來自ASP.Net,但有NULL的網址

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); 
     } 
    } 

錯誤( 「引薦來源網址:」 + MyUrl.AbsolutePath) ;

+1

你對'Response.Redirect'或'Request.UrlReferrer'中的'NullReferenceException'? – glautrou

+0

更新帖子.... – user2545071

+0

重複的問題:http://stackoverflow.com/questions/149130/request-urlreferrer-null – mswietlicki

回答

1

OK,有沒有一些錯誤:

您的代碼:

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運行服務器端您不知道什麼是引用者。

我發現this questionthis question這將幫助你更好地理解。

+0

所以,它只是客戶端的事情,這是我shouild使用其他一些像餅乾...? – user2545071

+0

謝謝! – user2545071

1

UrlReferrer基於瀏覽器應發送的HTTP_REFERER標頭。但是,與所有留給客戶的東西一樣,它是可變的。

我知道一些「安全」套件(如諾頓的互聯網安全套裝)將剝離該標頭,相信它有助於跟蹤用戶行爲。另外,我確定有一些Firefox擴展可以做同樣的事情。

底線是你不應該相信它。只需將url附加到GET字符串並基於該字符串重定向即可。

參考: Stackover flow reference