2009-11-06 56 views
1

我使用VS 2005,C#2,ASP.Net 2.0如何在ASP.Net

我無法找出如何跟蹤用戶按下F5/Ctrl + F5鍵/開的軌道F5 /刷新ASP.Net中的新窗口(Ctrl + N)。 我知道有一個Page.IsPostBack屬性,它告訴加載一個頁面以響應用戶採取的操作。

我只是好奇地想知道,爲什麼在ASP.Net中沒有屬性IsRefresh或Page.IsRefresh,只要用戶執行上述操作,就會返回true, 。

有沒有辦法知道這個?

其實我的問題是,我有一個DLL,使用它的所有我的aspx頁面被繼承,我必須 插入一些值,每當首次打開頁面,就是這樣,如果用戶只是打開頁面或不採取任何行動, 一個條目應該插入到數據庫中,但據我所嘗試,我控制它無論如何使用Page.IsPostBack屬性,但我卡在 在刷新的情況下,因爲它是無條件插入記錄。

回答

2

也許你想要Global.asax文件中的Session_Start方法,它將在每個用戶會話開始時觸發一次?

在你Global.asax文件,添加或編輯方法:

void Session_Start(object sender, EventArgs e) 
{ 
} 
1

爲什麼沒有在ASP.Net

屬性爲IsRefresh或Page.IsRefresh

因爲ASP。 NET不可能知道。瀏覽器不會發送任何可能由於刷新或正常負載而確定頁面是否被請求的信息。您需要重新考慮您的要求:數據庫日誌的實際用途是什麼?

+0

實際上,它用於保存用戶打開網頁/應用程序後使用所有QueryString參數以及他在表格中打開網頁的時間保存的網頁。如果他無條件地或無意地刷新頁面,我不想在表格中重複輸入。請在此幫助我。 – 2009-11-15 14:50:22

1

Global.asax文件中的Session_Start方法在每次啓動瀏覽器會話時觸發。您可以使用此方法來統計網站上唯一身份用戶的數量。

當會話結束時(顯式或超時),Global.asax中的Session_End方法被觸發。所以你可以在這裏減少計數。

希望上述這些方法的使用可以幫助您瞭解如何使用它們。

1

由於HTTP協議的無狀態特性的存在是沒有辦法從刷新

+0

然後這意味着屬性中沒有可用的服務器變量或Request.ServerVariables數據,它會告知頁面已刷新。 – 2009-11-15 14:48:09

1

分辨初始加載正如已經說過的。這是不可能的。由於刷新而發出的請求與第一次加載頁面時發出的請求沒有什麼不同。

這聽起來像你想以某種方式跟蹤頁面瀏覽量。這當然是可能的,但你需要做一些工作。你最好的選擇可能是登錄頁面的URL。您可能還需要包含查詢字符串以區分不同數據片段的頁面加載(如果這發生在您的應用程序中)。您還需要記錄當前用戶的ID以及他們會話的ID。

然後,您可以確保不會爲同一會話中的同一頁面的同一用戶插入兩個頁面視圖,從而有效過濾掉任何重新加載的頁面。

您需要注意的是,這與檢測刷新不同,您檢測到的是同一會話中的兩個頁面視圖,這可能是刷新,也可能是後退按鈕的使用,或只是從地址欄重新加載。

1

我的建議是在第一次加載時創建一個cookie,然後在Page_Load上檢查cookie是否存在。如果有,請不要插入記錄。您可以使用Session_End來銷燬或創建cookie,只要它適用於您的應用程序的體系結構。

3

與在Global.asax中使用函數類似(如其他人所建議的),您可以使用會話變量「flag」。當第一次加載頁面設置會話變量,然後就覈對它在你的頁面加載功能:

if (Session("visited") != "true" 
    //page has not been visited, log visit to DB 

只要確保你設置會話標誌頁面加載在上面的檢查之後的某個時間。

它並不準確(會話可能會在頁面處於活動狀態時超時,用戶可以完全離開網站並返回到同一瀏覽器並且會話保持活動狀態等),但是對於您的跟蹤而言,它要好得多統計數據庫中的每個頁面。

0

您可以使用此鏈接中提供的解決方案。只需按照您的要求修改它: Track page refresh

+0

你可以給一些更多的描述嗎? – 2013-11-16 05:23:36

+0

儘管鏈接可能會回答問題,但請在此處添加更多詳細信息。這樣做會確保即使鏈接變爲非活動狀態,您的答案仍然有效。 – Harry 2013-11-16 05:24:26