Asp.Net Url重写页面中Session无效
2015-06-10 09:44
405 查看
问题:
当自定义HttpModule类来重写Ur时,在Context.RewritePath()实行到真实页面中会话状态Session失效。用微软最新urlrewriter2时没有出现这样的问题
(说明:下面的HttpModuler重写规则我没有写的很复杂,这里只是为了说明问题简单写的,实际可运用正则表达式来匹配原路径和目标路径)
报错:
界面:
源码:
ConvertHtmlHttpModule:
SelfTextBoxControlTest.cs:
Web.config配置:
解决方案:
修改Web.config,先删除原有session映射,再添加
我看到一篇文章,说微软的rewriter组件重写Url也会出现session丢失的问题,自己试了下没有问题。至于Session对象丢失的原因,有结果我会在后续的文章中给出。
当自定义HttpModule类来重写Ur时,在Context.RewritePath()实行到真实页面中会话状态Session失效。用微软最新urlrewriter2时没有出现这样的问题
(说明:下面的HttpModuler重写规则我没有写的很复杂,这里只是为了说明问题简单写的,实际可运用正则表达式来匹配原路径和目标路径)
报错:
界面:
源码:
ConvertHtmlHttpModule:
public class ConvertHtmlHttpModule : IHttpModule { public ConvertHtmlHttpModule() { // // TODO: 在此处添加构造函数逻辑 // } public void Dispose() { //throw new NotImplementedException(); } public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(BeginRequest); } private void BeginRequest(object sender, EventArgs e) { HttpApplication httpApplication = (HttpApplication)sender; HttpContext context = httpApplication.Context; string pathStr = context.Request.Url.AbsolutePath; if (!File.Exists(context.Server.MapPath(pathStr))&&pathStr.IndexOf(".html")>0) { context.RewritePath(pathStr.Replace("html", "aspx")); } } }
SelfTextBoxControlTest.cs:
public partial class SelfTextBoxControlTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected override void Render(HtmlTextWriter writer) { //重写writer,修改action属性值 writer = new FromHtmlTextWriter(writer.InnerWriter); base.Render(writer); } protected void btnCheckCode_Click(object sender, EventArgs e) { if (txtCode.Text.Trim() != Session["CheckCode"].ToString()) ClientScript.RegisterClientScriptBlock(GetType(), Guid.NewGuid().ToString(), "alert('验证码输入错误!')", true); } } /// <summary> /// 把Form中的action属性改为重写后的url,否则还是提交给aspx页面 /// </summary> public class FromHtmlTextWriter : HtmlTextWriter { private string _url; public FromHtmlTextWriter(TextWriter writer) : base(writer) { _url = HttpContext.Current.Request.RawUrl; } public override void WriteAttribute(string name, string value, bool fEncode) { if (name == "action") value = _url; base.WriteAttribute(name, value,fEncode); } }
Web.config配置:
<system.webServer> <handlers> <add name="GetCheckCode" type="DiyControlWeb.GetCheckCodeHandler" verb="GET" path="GetCheckCode" /> </handlers> <modules> <add name="mudule" type="DiyControlWeb.ConvertHtmlHttpModule" /> </modules> </system.webServer>
解决方案:
修改Web.config,先删除原有session映射,再添加
<system.webServer> <handlers> <add name="GetCheckCode" type="DiyControlWeb.GetCheckCodeHandler" verb="GET" path="GetCheckCode" /> </handlers> <modules> <add name="mudule" type="DiyControlWeb.ConvertHtmlHttpModule" /> <span style="color:#FF0000;"><remove name="Session" /> <add name="HtmlSession" type="System.Web.SessionState.SessionStateModule" /></span> </modules> </system.webServer>
我看到一篇文章,说微软的rewriter组件重写Url也会出现session丢失的问题,自己试了下没有问题。至于Session对象丢失的原因,有结果我会在后续的文章中给出。
相关文章推荐
- KafkaSpout分析:配置
- 不支持union select 时的asp手工注入方法
- Aspose.Word 操作word复杂表格 拆分单元格 复制行 插入行 文字颜色
- Aspose.Word 操作word复杂表格 拆分单元格 复制行 插入行
- Asp的两个内置对象request和response
- C#语法糖之Cookies操作类 asp.net
- Metasploit渗透学习日记
- OSX10.10 Yosemite安装Metasploit
- 使用ASP.Net WebAPI构建REST服务——客户端
- 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
- C#语法糖之 session操作类 asp.net
- Aspose.Word 操作word表格的行 插入行 添加行
- Aspose.Word 操作word表格的行 插入行 添加行
- ASP.NET中使用Excel导入数据到数据库
- Aspose.Words.Tables.Row类操作word表格行
- Aspose.Words.Tables.Row类操作word表格行
- asp.net 使用UrlRewritingNet.UrlRewriter组件URL重写,伪静态详解
- ASP.NET forms凭据设置和跳转的几种方法
- Asp.net mvc5开源项目"超级冷笑话"
- Visual Studio C#的winform/webform/asp.net控件命名规范