2013-02-22 4 views
0

У меня есть метод электронной почты, который я вызываю OnPageLoad в C# 4.0. Когда страница загружает, он отправляет E-Mail пользователю. Проблема в том, что когда пользователь обновляет страницу, каждый раз, когда он генерирует E-Mail пользователю, который не является приемлемым. Есть ли способ, которым мой метод выполняется только в первый раз, когда открывается страница. Я вызываю метод следующим образом:Как выполнить метод один раз

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

+1

Возможно, вы меняете цепочки событий и отправляете электронное письмо до того, как пользователь придет на страницу, если это возможно. Таким образом, даже если пользователь ударил F5, он/она только обновил страницу. – marcoaoteixeira

ответ

1

Вы можете опционально хранить куки-файл и проверить, существует ли файл cookie перед отправкой электронной почты. Это самый простой способ, лучшим способом было бы удерживать переменную в таблице профиля пользователя в базе данных, если она у вас есть. Это самый безопасный способ, поскольку файлы cookie и сеанс не являются безграничными.

+0

Опираясь на клиента, чтобы рассказать вам, делает ли клиент что-то несанкционированное, не кажется отличной идеей. – Rawling

+0

Мне грустно, что это вариант, не сказал, что это лучше, чем использование сеанса :) Не исключено, что пользователь может удалять куки и снова получать электронную почту. –

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

    Session[emailid]==true; 
} 

Помните, что сеанс может быть перезагружен при различных обстоятельствах, таких как тайм-аут или перезапуск IIS, и снова будет отправлено электронное письмо со следующим началом сеанса. Если вы хотите, чтобы это письмо отправлялось всего один раз в жизни - вам нужно будет сохранить флаг отправления в базе данных.

0

Как уже упоминался товарищеской стековой starTrekkers, способы сделать бы

Хранить информацию на клиентской системе - очевидные опасности :(

поддерживать переменный сеанс - сброс события будет препятствовать ее использованию - это ситуация может быть обработано путем сохранения на локальном диске или с тех пор, как обслуживание может обрабатываться несколькими серверными машинами, на уровне сохраняемости на глобальном уровне (для серверов служб), который может быть потоком, db, местом в облаке.

Другое решение может быть, чтобы переместить эту логику со страницы на почтовую службу - что больше но гораздо более чистый подход.

Смежные вопросы