我搜索了很多,但确实找到了解释饼干的任何好东西
时,我知道饼干调整是在scuh情况下使用的但我对它几乎没有什么困惑。我想知道它的内部工作原理以及如何在Asp .Net MVC中使用它。还有任何限制,以及饼干改变的任何替代方案 请建议我一个更好的链接,以便简要地理解它 感谢。
答案 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)