2013-02-22 68 views
0

我有一個電子郵件方法,我打電話OnPageLoadC# 4.0。當頁面加載它發送電子郵件給用戶。問題是,當用戶刷新頁面時,每次它生成的電子郵件給用戶,這是不可接受的。有沒有什麼辦法,我的方法只執行第一次當頁面打開。我打電話的方法是這樣的如何執行一次方法

if (!IsPostBack) 
{ 
    Sendemail(emailid, "[email protected]", "SML Dashboards Access", "<b><font color=red>Dashboard Access Alert!</font></b> <br></br>Note: If the access is by yourself, then please ignore this email.<br><br>SML Dashboards accessed using your credentials<br><b>" + emailid + "<br><b>Location/IP Address :</b>" + GetUserIP()); 
} 

這樣,用戶在刷新頁面時總是收到電子郵件。我怎樣才能避免它?

+1

這樣的聲音在「登錄」事件中更合適,而不是「頁面加載」事件。 – Rawling 2013-02-22 12:31:00

+1

也許您可以在用戶到達頁面之前更改事件鏈併發送電子郵件(如果可能的話)。因此,即使用戶點擊F5,他/她也只會刷新頁面。 – marcoaoteixeira 2013-02-22 12:45:49

回答

1

您可以選擇存儲cookie並在發送電子郵件之前檢查cookie是否存在。 這是最簡單的方法,最好的方法是將變量保存在數據庫的用戶配置文件表中(如果有)。這是最安全的方式,因爲cookie和會話不是無限的。

+0

依靠客戶告訴你客戶是否在做未經授權的事情聽起來不是一個好主意。 – Rawling 2013-02-22 12:36:36

+0

我很傷心這是一個選項,並沒有說它比使用會話更好:)這不是肯定的原因,用戶可以刪除cookies並重新獲得電子郵件。 – 2013-02-22 12:47:46

0
if(Session[emailid]==null) 
{ 
    // SEND 

    Session[emailid]==true; 
} 

記住,會話可以在不同情況下像超時或IIS重啓,重置電子郵件將再次下一屆會議開始發送。如果你想讓這封電子郵件一生只發一次 - 你將不得不在數據庫中持續發送標誌。

0

正如同胞堆棧starTrekkers提到的,方法可以做到將

客戶端系統上

存儲信息 - 明顯的危險:(

維護會話變量 - 復位事件將妨礙它的易用性 - 這種情況可以通過持久化到本地磁盤來處理,或者由於該服務可以由多個服務器機器來處理,也可以在全局可見的(用於服務服務器)持久層(其可以是流,db,位於雲中)進行處理。可以將這個邏輯從頁面轉移到郵件服務 - 這更多工作但更清潔的方法。