HttpModule如下:
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
} void context_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
string url = application.Request.Url.ToString(); string userName = Convert.ToString(application.Session["UserName"]);......application.Session["UserName"]出错:会话状态在此上下文中不可用请问怎样在HttpModule中获得Session? 请帮忙,多谢了。。
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
} void context_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
string url = application.Request.Url.ToString(); string userName = Convert.ToString(application.Session["UserName"]);......application.Session["UserName"]出错:会话状态在此上下文中不可用请问怎样在HttpModule中获得Session? 请帮忙,多谢了。。
解决方案 »
- 平台与平台页面的跳转
- 我在IIS上发布网站报这种错误怎么解决,高手指导!
- 谁有FrontPage服务器扩展的 急!急!急!急!
- 判断函数类型
- 毕业设计是个网上选课系统。下到了了一堆aspx。aspx。cs
- 结贴快: 分页中,如何修改了信息后,还能返回当前分页?
- 急救!!!!!!!!!!!!!
- .net 将数据类型 varchar 转换为 float 时出错?如何解决在线等
- 请教:服务器端按钮事件机理
- 各位老大:只提供一个客户端的本地文件路径,上传这个文件到服务端真的没办法了吗?
- 手动绑定GridView和DetailsView出现的问题
- !win2003 sp2 设置文件夹权限的时候总是卡住不动,好像不允许设置一样,求救!
using System.Web;
namespace MyModule
{
public class MyModule : IHttpModule
{
public void Init(HttpApplication application)
{
application. AcquireRequestState += (new
EventHandler(this.Application_AcquireRequestState));
}
private void Application_AcquireRequestState (Object source,
EventArgs e)
{
HttpApplication Application = (HttpApplication)source;
User user=Application.Context.Sesseion["User"] //获取User
string url=Application.Context.Request.Path;
//获取客户访问的页面
Module module= //根据url得到所在的模块
If(!RightChecker.HasRight(user,module))
Application.Context.Server.Transfer("ErrorPage.aspx");
//如果没有权限,引导到错误处理的页面
}
public void Dispose()
{
}
}
}
//--这个应该有点帮助吧
不行,我的代码就是这个
第二次如果有值了就可以取到了.
我判断了if (application.Session["UserName"] == null)
return;
string userName = Convert.ToString(application.Session["UserName"]);这样还是不行,提示错误还是会话状态在此上下文中不可用
HttpContext.Current.Session[sessionName] = sessionValue;
呢.1.1 2.0?
application.Context.Sesseion["UserName"] 和 application.Session["UserName"]
都用过,一样
对css文件的请求也会进入context_AcquireRequestState
那样的话if (application.Session["UserName"] == null)这句话都会出错
string userName = Convert.ToString(System.Web.HttpContext.Current.Session["UserName"]);
System.Web.HttpContext.Current.Session["UserName"]这个方法我已经试过了。也是不对
首先,httpmodule是对所有的请求都相应,所以有一些非aspx的请求也进入了。比如说xx.css
这样的话就不存在session了,再去取session的值肯定会出错。其次,我把以前做java使用的那种filter方式配置的action,url不直接写xx.aspx,而用XX/XXX/XX这种模块方式,所以也会取不到sessioin。我对dotnet的httpmodule不是很熟,如果高手有更好的解释或者方法,请说说
明天我再结帖,谢谢大家了
{
string _message = "//更新成功。"; public void ProcessRequest(HttpContext context)
{
string checkString = context.Request.QueryString["cs"];
if ((context.Session["CheckString"] != null) && (checkString == context.Session["CheckString"].ToString()))
{
this.ClickCountAddOne(Convert.ToInt32(context.Request.QueryString["id"]), context.Request.QueryString["table"], ref _message);
context.Session["CheckString"] = string.Empty;
}
else
{
_message = "//请求错误。";
}
context.Response.ContentType = "text/plain";
context.Response.Write(_message);
} public bool IsReusable
{
get
{
return true;
}
}
}
必须实现IRequiresSessionState接,才能取得session
必须实现IRequiresSessionState接口,才能取得session
你可以考虑这样的方案,因为使用HttpModule不会对请求的后缀进行配置识别
配置识别指的是像 HttpHandler 在web.config中具有path属性 可以对请求的类型进行识别和过滤所以,你可以通过表配置的方式来实现这样的功能。
权限验证不只包含是否已经登录,还包含了每一个path是否具有访问权限,还有可能包含了权限的范围大小
如果这样考虑,可以把每一个path作为配置表中的一条记录,表中的path仅仅是操作,像.css .ico这样的不需要放入表中这样我们就得到了一张操作表,表中包含了我们操作所使用的每一个path,这里你可以理解为URL下面就简单了
在应用程序开始时 就将操作表放入缓存在权限验证的中
string path = context.Request.FilePath;if(service.GetActionByPath(path) != null)
{
//加入验证方法
}不仅是这里,比如记录操作日志,记录错误日志,都可以读取这张操作表,还可以进行配置, 比如加入字段 isLog另外,异步调用会使applacation.session,applacation.cache丢失 所以建议使用键值形式对这些数据进行保存,当然,这些类前提是必须可以被序列化
:
public void Init(HttpApplication application)
{
application. AcquireRequestState += (new
EventHandler(this.Application_AcquireRequestState));
}
private void Application_AcquireRequestState (Object source,
EventArgs e)
{
HttpApplication Application = (HttpApplication)source