【问题标题】:Cookie Munging in Asp .Net MVCAsp .Net MVC 中的 Cookie 处理
【发布时间】:2014-06-30 03:06:31
【问题描述】:

我用谷歌搜索了很多,但没有找到任何解释 cookie 修改的好东西。
我知道当

  • 某些浏览器不支持 cookie。
  • 有时用户会在浏览器中禁用 cookie。

但我对此没有什么困惑。我想知道它在内部是如何工作的,以及它是如何在 Asp .Net MVC 中使用的。它还有任何限制以及cookie munging的任何替代方法。
请建议我一个更好的链接来简要理解它。
谢谢。

【问题讨论】:

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


【解决方案1】:

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 的 url,例如 //controller/action ,你可以构建像“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} 参数形成您的网址“ActionLinks”进行一些调整。

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

【讨论】:

    【解决方案2】:

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

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

    请参阅此link 和此document 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 2017-06-18
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2012-06-02
      • 1970-01-01
      相关资源
      最近更新 更多