如何执行一次方法

时间:2013-02-22 12:24:49

标签: c# c#-4.0

我有一个电子邮件方法,我在OnPageLoad中呼叫C# 4.0。当页面加载时,它会向用户发送电子邮件。问题是,当用户刷新页面时,每次它都会向用户生成电子邮件,这是不可接受的。我的方法只有在页面打开时才第一次执行。我正在调用这样的方法< / p>

if (!IsPostBack)
{
  Sendemail(emailid, "ibrahim.cheema@shakarganj.com.pk", "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());
}

这样,用户在刷新页面时始终会收到电子邮件。我怎么能避免它?

3 个答案:

答案 0 :(得分:1)

您可以选择存储Cookie并在发送电子邮件之前检查Cookie是否存在。  这是最简单的方法,最好的方法是将变量保存在数据库中的用户配置文件表中(如果有的话)。这是最安全的方式,因为cookie和会话不是无限的。

答案 1 :(得分:0)

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

  Session[emailid]==true;
} 

请记住,会话可能会在超时或IIS重启等不同情况下重置,并且会在下次会话启动时再次发送电子邮件。如果您希望这封电子邮件一生只发送一次 - 您将不得不在数据库中保留已发送的标志。

答案 2 :(得分:0)

正如stack-starTrekkers的同事所提到的,方法是

在客户端系统上存储信息 - 明显的危险:(

维护会话变量 - 重置事件会妨碍其可用性 - 这种情况可以通过持久保存到本地磁盘来处理,或者因为服务可以由多台服务器机器处理,也可以处理为全局可视(对于服务服务器)持久层是一个流,数据库,在云中的位置。

其他解决方案可能是将此逻辑从页面移动到邮件服务 - 这是更多工作但更清晰的方法。