C# 如何一次执行一个方法
我在C# 如何一次执行一个方法,c#,c#-4.0,C#,C# 4.0,我在C#4.0中调用了一个电子邮件方法OnPageLoad。当页面加载时,它会将电子邮件发送给用户。问题是,当用户刷新页面时,每次它都会向用户生成不可接受的电子邮件。是否有任何方式使我的方法仅在页面第一次打开时执行。我这样调用该方法 if (!IsPostBack) { Sendemail(emailid, "ibrahim.cheema@shakarganj.com.pk", "SML Dashboards Access", "<b><font color=red>
C#4.0
中调用了一个电子邮件方法OnPageLoad
。当页面加载时,它会将电子邮件发送给用户。问题是,当用户刷新页面时,每次它都会向用户生成不可接受的电子邮件。是否有任何方式使我的方法仅在页面第一次打开时执行。我这样调用该方法
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());
}
if(!IsPostBack)
{
sendmail(emailid),易卜拉欣。cheema@shakarganj.com.pk“,”SML仪表板访问“,”仪表板访问警报!
注意:如果您自己访问,请忽略此电子邮件。
使用您的凭据访问SML仪表板
“+emailid+”
位置/IP地址:“+GetUserIP()”;
}
这样,用户刷新页面时总是会收到电子邮件。我怎样才能避免呢
if(Session[emailid]==null)
{
// SEND
Session[emailid]==true;
}
请记住,会话可能在不同的情况下重置,如超时或IIS重新启动,并且在下次会话启动时将再次发送电子邮件。如果您希望此电子邮件一生只发送一次,则必须在数据库中保留发送标志。您可以选择存储cookie,并在发送电子邮件之前检查cookie是否存在。
这是最简单的方法,最好的方法是在数据库的用户配置文件表中保存变量(如果有)。这是最安全的方法,因为Cookie和会话不是无限的。正如stack starTrekkers的同事所提到的,方法是 在客户端系统上存储信息--明显的危险:( 维护会话变量——重置事件会妨碍其可用性——这种情况可以通过持久化到本地磁盘来处理,或者因为服务可以由多台服务器机器来处理,所以可以通过全局可视(对于服务服务器)持久化层来处理,持久化层可以是云中的流、db和位置
另一个解决方案可能是将此逻辑从页面移动到邮件服务,这是一种更为简单的方法。听起来这在“登录”事件中比在“页面加载”事件中更合适事件。如果可能的话,也许你可以在用户到达页面之前更改事件链并发送电子邮件。因此,即使用户点击F5,他/她也只能刷新页面。依靠客户端告诉你客户端是否正在做未经授权的事听起来不是一个好主意。我很难过这是一个选项,没有说这更好han正在使用会话:)这不确定,因为用户可以删除cookie并再次收到电子邮件。