MVC 4 - Cookie已在ActionExecutingContext上过期

时间:2014-09-23 17:53:13

标签: asp.net-mvc cookies filter

我有点迷失了,我找不到解决办法。

我正在使用以下代码创建过滤器:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class SessionFilter :System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

我正在验证cookie是否存在,为空或空白或是否已过期以下代码:

if (filterContext.HttpContext.Request.Cookies["MyCookie"] == null ||
    String.IsNullOrEmpty(filterContext.HttpContext.Request.Cookies["MyCookie"].Value) ||
    (filterContext.HttpContext.Request.Cookies["MyCookie"].Expires < DateTime.Now &&
    filterContext.HttpContext.Request.Cookies["MyCookie"].Expires != new DateTime()))
                   {

但即使在到期后的一天设置了到期值,cookie也已在此部分过期:

private void SetAuthenticationCookie(String username, String MyValue)
{
    FormsAuthentication.SetAuthCookie(username.ToUpper(), false);
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    var ticket = FormsAuthentication.Decrypt(cookie.Value);

    HttpCookie newCookie = new HttpCookie("MyCookie", MyValue);
    newCookie.Expires = ticket.Expiration;
    HttpContext.Current.Response.Cookies.Add(newCookie);
}

以下是Web.config上的配置:

<authentication mode="Forms">
  <forms loginUrl="~/Login/SignIn/" protection="All" timeout="1440" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="/" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
</authentication>

再次感谢你。

0 个答案:

没有答案