asp.net-mvc – 无Cookie会话和跨站点表单帖子
这是情况……
站点1)ASP.NET MVC应用程序,供客户登录,查看和支付账单等.该站点使用无cookie的ASP会话,允许多个会话在选项卡式浏览器中运行. 站点2)具有标准静态内容的公司网站.这将在每个页面的顶部有一个小表单,其中包含将发布到MVC应用程序的用户名/密码表单. 发布到MVC应用程序时,正在生成一个新会话,并且该站点返回302重定向,其中URL中包含会话ID(如预期的那样).控制器有两个Login方法,一个用于处理GET,一个用于处理POST.由于重定向,它击中了GET方法并且它丢失了表单值. 通过更改公司站点上的方法来执行表单GET而不是POST,用户名和密码在重定向后保留在查询字符串中,我可以通过这种方式处理请求,但我宁愿做一个POST而不是通过URL中的数据. 我的直觉说实现某种自定义HttpHandler会允许我这样做,但我不确定我能在哪里与会话创建联系起来. global.asax中Session_Start的断点显示会话ID已经被装箱,并且该点已经发生重定向. 解决方法
我相信我发现了重定向发生的位置以及可能的解决方案. ISessionIDManager接口具有SaveSessionID方法,其上包含“out bool重定向”参数.似乎在创建新会话时,默认会话管理器会重写此方法中的URL并执行重定向.我开始实现自己的ISessionIDManager并且我能够抑制重定向,但是没有办法(我可以告诉)将会话ID插入到无cookie会话的URL中而不进行重定向.在请求生命周期中的那个点上不允许Server.Transfer.我试过了,但收到了“Error Executing Child Request”消息.
稍后,我在Enabling POST in cookieless ASP.NET Applications上发现了这篇文章.基本上通过绑定到Application_EndRequest事件,您可以检测重定向,清除响应并伪造表单发布到包含会话ID的新URL. void MvcApplication_EndRequest(object sender,EventArgs e) { HttpApplication application = (HttpApplication)sender; if (application.Request.Form["CorpLogin"] == "1" && application.Response.RedirectLocation != null && application.Response.IsRequestBeingRedirected) { StringBuilder build = new StringBuilder(); build.Append("<html>n<body>n<form name='Redirect' method='post' action='"); build.Append(application.Response.RedirectLocation); build.Append("' id='Redirect' >"); foreach (string key in application.Request.Form) { if (key != "CorpLogin") build.Append(string.Format("n<input type='hidden' name='{0}' value = '{1}'>",(string)key,application.Request.Form[(string)key])); } build.Append("n<noscript><h2>Object moved <input type='submit' value='here'></h2></noscript>"); build.Append(@"</form> <script language='javascript'> <!-- document.Redirect.submit(); // --> </script> "); build.Append("</body></html>"); application.Response.Clear(); application.Response.ClearHeaders(); application.Response.Output.Flush(); application.Response.Write(build.ToString()); } } 这不是一个理想的解决方案恕我直言,但它可能足以满足要求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 5中的Actionfilter注入
- asp.net – 在代码隐藏中更改文本框BackColor
- asp.net-mvc – 无Cookie会话和跨站点表单帖子
- .net – 具有流畅验证的Ninjects
- asp.net – 如何为我的本地计算机设置不同的web.config设置
- asp.net – 不允许从数据类型sql_variant到uniqueidentifie
- asp.net-mvc – 哪个更快asp.net mvc json或json.net?
- win10+CUDA8.0+VS2013环境配置
- asp.net-mvc-3 – 将nhibernate实体序列化为json错误:连接
- DevExpress ASP.NET示例资源最全分享!(一)