在重定向期间删除 cookie
Delete cookie during redirect
如果请求带有特定的 cookie 集,我想删除该 cookie,然后重定向回相同的操作(并保留查询字符串、路由值等)
我希望在第二个(重定向的)请求中,cookie 会消失。 但事实并非如此。
我的操作方法:
[DeleteCookie]
public virtual ActionResult doStuff() {
// blah
}
我的操作过滤器:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class DeleteCookieAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
var request = context.HttpContext.Request;
if (request.Cookies.AllKeys.Contains("foo")) {
request.Cookies["foo"].Expires = DateTime.Now.AddYears(-1); // I tried this
request.Cookies.Remove("foo"); // I tried this
context.Result = new RedirectToRouteResult(context.RouteData.Values);
}
base.OnActionExecuting(_filterContext);
}
}
在第一次请求期间,一旦我删除了 cookie,它就会从请求中消失。但是在第二次重定向请求中,它仍然存在!所以上面的代码进入了无限循环。
如何删除它?
试试这个:
HttpCookie cookie = Request.Cookies["foo"];
if (cookie != null)
{
cookie .Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie);
}
我正在添加一些与 cookie 相关的非常重要的要点。
- 我们可以随时添加 cookie(临时和永久)。
- 我们不能删除cookie,因为它会存储在客户端机器上,我们没有权限进行删除操作。
参考以下解决方案供您参考。
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
请检查 cookie 是否存在,不要使用 Remove 关键字,它不会起作用。
分享一个最好的方法,它会帮助你了解更多。,你也可以使用几天。
不是很强制,你只需要添加年份
HttpCookie cookie = Request.Cookies["testcookie"];
if (cookie != null)
{
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
我无法让 cookie 过期和页面重定向(至少不是通过 MVC)。
如本回答所述:
我不得不使 cookie 过期,然后显示一个视图,并在该视图中重定向。 (在我的例子中,我使用 RedirectToAction 重定向回相同的控制器操作。)
@{
ViewBag.Title = "Expire";
Layout = null;
Response.Redirect( Url.Action("Index", "Home"), false);
}
如果请求带有特定的 cookie 集,我想删除该 cookie,然后重定向回相同的操作(并保留查询字符串、路由值等)
我希望在第二个(重定向的)请求中,cookie 会消失。 但事实并非如此。
我的操作方法:
[DeleteCookie]
public virtual ActionResult doStuff() {
// blah
}
我的操作过滤器:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class DeleteCookieAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
var request = context.HttpContext.Request;
if (request.Cookies.AllKeys.Contains("foo")) {
request.Cookies["foo"].Expires = DateTime.Now.AddYears(-1); // I tried this
request.Cookies.Remove("foo"); // I tried this
context.Result = new RedirectToRouteResult(context.RouteData.Values);
}
base.OnActionExecuting(_filterContext);
}
}
在第一次请求期间,一旦我删除了 cookie,它就会从请求中消失。但是在第二次重定向请求中,它仍然存在!所以上面的代码进入了无限循环。
如何删除它?
试试这个:
HttpCookie cookie = Request.Cookies["foo"];
if (cookie != null)
{
cookie .Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie);
}
我正在添加一些与 cookie 相关的非常重要的要点。
- 我们可以随时添加 cookie(临时和永久)。
- 我们不能删除cookie,因为它会存储在客户端机器上,我们没有权限进行删除操作。
参考以下解决方案供您参考。
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
请检查 cookie 是否存在,不要使用 Remove 关键字,它不会起作用。
分享一个最好的方法,它会帮助你了解更多。,你也可以使用几天。
不是很强制,你只需要添加年份
HttpCookie cookie = Request.Cookies["testcookie"];
if (cookie != null)
{
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
我无法让 cookie 过期和页面重定向(至少不是通过 MVC)。
如本回答所述:
我不得不使 cookie 过期,然后显示一个视图,并在该视图中重定向。 (在我的例子中,我使用 RedirectToAction 重定向回相同的控制器操作。)
@{
ViewBag.Title = "Expire";
Layout = null;
Response.Redirect( Url.Action("Index", "Home"), false);
}