【发布时间】:2011-09-06 10:20:30
【问题描述】:
我正在尝试查看是否可以在 global.asax 的 Application_Error() 事件期间设置 cookie。
当我调试我的应用程序时,看起来代码添加了 cookie,但下次加载时,cookie 消失了。它每次都在重新创建cookie。 我在本地(使用 casini)或服务器尝试过。
我开始认为这是不可能的。
这是一些 sn-p 代码。
全局asax
protected void Application_Error()
{
var ex = Server.GetLastError();
Server.ClearError();
string keyName = ex.StackTrace;
string[] split = System.Text.RegularExpressions.Regex.Split(ex.StackTrace, "\r\n");
// Don't want the key name to be too long but unique enough
if (split.Length > 0)
{
keyName = split[0];
}
keyName = keyName.Trim();
HttpCookie exist = Response.Cookies[keyName];
if (exist == null || string.IsNullOrWhiteSpace(exist.Value))
{
HttpCookie newCookie = new System.Web.HttpCookie(keyName, "ehllo");
newCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(newCookie);
// email people
}
}
导致错误的控制器
public ActionResult Index()
{
int a = 0;
int b = 2;
try
{
int hello = (b / a);
}
catch (Exception e)
{
throw;
}
return View();
}
更新 - 回答 Tejs 的评论 - 该项目的目标是通过电子邮件发送错误(很容易做到)。如果用户连续按 F5(我认为 cookie 可能是个好主意),我正在尝试找出一种方法来防止邮箱收到垃圾邮件。
更新 2 - 我已更改我的全局 asax 以反映更接近我想要完成的目标
【问题讨论】:
-
为什么要在 Application_Error 上设置 cookie?
-
用我的推理 Tejs 更新了我的问题
-
如果你想防止垃圾邮件,你需要实现某种限制;通常这只是标记最后一个错误的日期时间,然后在日期时间+一段时间过去之前不会通过电子邮件发送另一个错误。
-
您是否有任何代码在它进入浏览器之前创建的 SAME 请求期间尝试读取 cookie?我有一个应用程序需要修复与在错误状态下想要删除 cookie 有关的混乱问题,而我的问题都是由读取 cookie 引起的。我通过传递一个有状态的对象来规避这个问题,当处于错误状态时,该对象会在行尾转换为 cookie。
标签: c# asp.net asp.net-mvc-3 cookies application-error