Cookie演绎Asp .Net MVC

时间:2014-06-30 03:06:31

标签: c# asp.net asp.net-mvc cookies

我搜索了很多,但确实找到了解释饼干的任何好东西

时,我知道饼干调整是在scuh情况下使用的
  • 某些浏览器不支持Cookie。
  • 有时用户会在浏览器中禁用Cookie。

但我对它几乎没有什么困惑。我想知道它的内部工作原理以及如何在Asp .Net MVC中使用它。还有任何限制,以及饼干改变的任何替代方案 请建议我一个更好的链接,以便简要地理解它 感谢。

2 个答案:

答案 0 :(得分:3)

MVC旨在不支持无cookie会话。按照msdn “ASP.NET MVC不支持无cookie会话和身份验证,我们会主动阻止它”this.

那么你现在有什么选择是通过在每个安全控制器的url中传递session_id来实现身份验证,这是你可以做的:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Secure",
            url: "{session_id}/{controller}/{action}"
            defaults: new 
            { 
                session_id=string.Empty,
                controller = "Home", 
                action = "Index"
            }
        );
    }

现在,当用户使用用户名/密码登录时,会将他重定向到具有session_id的网址 //控制器/动作,您可以构建像“username | expirytime”这样的sessionid并对其进行加密,以便在解密时获得用户名并检查会话是否已过期。或者,您可以使用“session_id”,“userid”,expirytime'

等架构存储在数据库中

现在你还需要一个动作过滤器

public class SessionIdFilter: ActionFilterAttribute
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var sessionid = filterContext.RouteData.Values["session_id"]; 
        //Check session id against db , if exists return;
                   filterContext.HttpContext.User= new CustomPrincipal("username");//read about custom IPrincipal implementation its easy. 

    }
    public void OnActionExecuted(ActionExecutedContext filterContext)
    { 
       if( !filterContext.HttpContext.User.Identity.IsAuthenticated) 
          { 
             filterContext.Result = new RedirectResult(loginurl); 
          }
    }
}

我希望可以帮助您入门,您可能需要对如何使用{session_id} param形成您的网址'ActionLinks'进行一些调整。

但是,在这种情况下,会话劫持也是可能的。

答案 1 :(得分:0)

默认情况下,asp.net使用cookie来存储登录用户的会话ID。但是每个浏览器都有一个禁用cookie的选项。如果禁用cookie,则任何网站都无法在用户的计算机上创建cookie。

当禁用cookie时,会话ID将附加到URL中并传递给服务器。服务器对其进行解码并完成请求的页面。

有关详细信息,请参阅此link和此document