确定如此设置和读取当前会话中的变量
String Myvar =(string) System.Web.HttpContext.Current.Session[“MyVariable”]
设置
System.Web.HttpContext.Current.Session[“MyVariable”] = “NewValue”
我无法做到,我从System.Web.HttpContext.Current.Session获得System.NullReferenceException: Object reference not set to an instance of an object.
。
在我的web.config中我有
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20">
</sessionState>
我已经阅读了十几篇关于IHttpHandler
和IRequiresSessionState
界面的必要性的文章。我认为问题可能是因为我在Page_PreInit
中请求此信息。我在堆栈溢出文章中发现了 solution ,但我似乎没有正确使用它来实际实现这一目标。
我不确定我错过了什么。提前谢谢。
答案 0 :(得分:1)
正如评论中所提到的那样,您在PreInit
事件中是否需要这样做?
PreInit
在页面生命周期的早期发生。事实上,在所有控件完全初始化之前,甚至在应用母版页(如果有的话)之前都会发生这种情况等。
大多数应用程序的更好选择是Load
事件。如果你还在那里NullReferenceException
,那么问题就更大了。
答案 1 :(得分:1)
您可以通过在类中实现IRequiresSessionState接口来访问会话。
这是一个标记接口,因此您不需要实现任何额外的代码。
当你实现这个时,asp.net会知道你想要访问会话。
public partial class YOUR_ASPX: System.Web.UI.Page , IRequiresSessionState
{
... your code
}
答案 2 :(得分:0)
要在pre-init之前访问会话状态,您可以执行以下操作。我使用它,以便我可以拥有与普通用户不同的管理主人。每个页面顶部都有一个方法。
PageTools tools = new PageTools();
protected void Page_PreInit(object sender, EventArgs e)
{
tools.setMasterPage(Page, Context);
}
PageTools是我的类,它包含选择适当的mater页面并具有http处理程序的方法。
public void setMasterPage(Page page, HttpContext context)
/***********************************************************************
* Author Daniel Tweddell
* Date 9/18/09
*
* Several of the pages are for non-admin use, however these pages will
* also be used by the admin users and will need to have the admin menu
* and such. So based on the login, we either show the page with the
* standard master or if the user is admin, use the admin master.
***********************************************************************/
{
if (context.Handler is IReadOnlySessionState || context.Handler is IRequiresSessionState)
{
context.Handler = Handler();
}
String sMasterPage="~/content/page.master";
if (userinfo.IsUserAdmin) sMasterPage="~/content/administrator/admin.master";//make sure the user is admin
page.MasterPageFile = sMasterPage;
}
Here 是设置httphandler的一步一步。 (这是你需要的另一件事。