3

我在应用程序代码session.cs文件中使用了以下代码。它最初是在 httpmodule.cs 中加载的,每当浏览器中的每个页面都被点击时。我发现httpcontext.current.session值是null.

if (HttpContext.Current != null && HttpContext.Current.Session != null)
        {
            try
            {
                if (HttpContext.Current.Session.Keys.Count > 0)
                {

                }
                else
                {
                    HttpContext.Current.Response.Cookies["ecm"].Expires = DateTime.Now;
                    HttpContext.Current.Response.Cookies["ecmSecure"].Expires = DateTime.Now;


                }
            }
            catch (Exception ex)
            {

            }
        }

web.config 会话设置:

<sessionState mode="InProc" 
              stateConnectionString="tcpip=127.0.0.1:42424" 
              sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" 
              cookieless="false" 
              timeout="5" />
4

2 回答 2

0

一种可能的方法是将其包装在属性中并像字符串一样访问它:-

string SessionVariable
{
   get{
      return Session("SessionVariable") ?? String.Empty;
   }
   set{
      Session("SessionVariable") = value;
   }
}

然后像这样使用:-

if( String.IsNullOrEmpty( SessionVariable) )
{
   // do something
}
于 2013-09-17T18:00:18.397 回答
0

感谢有回复的朋友。我找到了答案。会话值是 http 模块生成的。访问会话值后仅调用结束请求。我使用的以下代码。

public void Init(HttpApplication context)
{
    context.BeginRequest += new EventHandler(context_BeginRequest);
    context.EndRequest += new EventHandler(context_EndRequest);
    context.AcquireRequestState += new EventHandler(SessionClear);
}

public void SessionClear(object sender, EventArgs e)
{
    try
    {
        if (HttpContext.Current != null && HttpContext.Current.Session != null)
        {
            if (!(HttpContext.Current.Session.Keys.Count > 0))
            {

            }

        }
    }
    catch (Exception ex)
    {
    }
}
于 2013-09-18T10:29:23.173 回答