none
[求助] session问题 RRS feed

  • 问题

  • 我在程序里使用session时一定要写全路径System.Web.HttpContext.Current.Session[]不然就报以下错误

     

    只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 <configuration>\<system.web>\<httpModules> 节中包括 System.Web.SessionStateMod 或自定义会话状态模块。

     

    我在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="20"/>
      

    <configuration>
     <system.web>
       <pages enableSessionState="true" />
     </system.web>
    </configuration>

    也引用了using

     

     可还是报错     

     

    2008年8月6日 2:44

答案

  • 你的代码位置放的不对吧?

    下面的例子是可以的,不要放在类的构造函数内

    Code Snippet

     

    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.SessionState;


    ///
    ///CommonPage 的摘要说明
    ///
    public class CommonPage : Page
    {
        public CommonPage()
     {
           
            base.Load += new EventHandler(CommonPage_Load);

     }
        private void CommonPage_Load(object sender, EventArgs e)
        {

            HttpContext.Current.Session["Start"] = "0";
            if (HttpContext.Current.Session["Start"] == null || HttpContext.Current.Session["Start"].ToString() != "1")//如果数据没有初始化
            {
                HttpContext.Current.Session["Start"] = "1";//数据已经初始化
                HttpContext.Current.Response.Write("Not Login");
            }
            else
            {
                HttpContext.Current.Response.Write("Session = " + HttpContext.Current.Session["Start"].ToString());
            }
        }
    }

     

     

    另外,你原来的判断好像有些问题,应该改为

     

    Code Snippet

    如果先赋值为0,则永远会去Login,呵呵,也可能你只是测试下

     

     

    if (HttpContext.Current.Session["Start"] == null || HttpContext.Current.Session["Start"].ToString() != "1")//如果数据没有初始化
    {
        HttpContext.Current.Session["Start"] = "1";//数据已经初始化
        HttpContext.Current.Response.Write("Not Login");
    }
    else
    {

        HttpContext.Current.Response.Write("Session = " + HttpContext.Current.Session["Start"].ToString());
    }

     

     

     

     

    2008年8月6日 13:31
    版主

全部回复

  • Session是Page类的属性,在其他程序,例如,自定义的cs类里面,需要使用
    System.Web.HttpContext.Current.Session

    或者
    using System.Web;

    使用 HttpContext.Current.Session[]....


    2008年8月6日 5:18
    版主
  • 我的自定义类继承的是web.UI.page啊

     

    HttpContext.Current.Session["Start"]= "0";

     if (HttpContext.Current.Session["Start"] == null && HttpContext.Current.Session["Start"].ToString() != "1")//如果数据没有初始化
                {
                    HttpContext.Current.Session["Start"]= "1";//数据已经初始化
                    loginPage();
                }         

     

    我在

    HttpContext.Current.Session["Start"]= "0";

    付值的时候报异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

     

     

     百思不得其解

     请 帮忙看看

    2008年8月6日 6:25
  • 你的代码位置放的不对吧?

    下面的例子是可以的,不要放在类的构造函数内

    Code Snippet

     

    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.SessionState;


    ///
    ///CommonPage 的摘要说明
    ///
    public class CommonPage : Page
    {
        public CommonPage()
     {
           
            base.Load += new EventHandler(CommonPage_Load);

     }
        private void CommonPage_Load(object sender, EventArgs e)
        {

            HttpContext.Current.Session["Start"] = "0";
            if (HttpContext.Current.Session["Start"] == null || HttpContext.Current.Session["Start"].ToString() != "1")//如果数据没有初始化
            {
                HttpContext.Current.Session["Start"] = "1";//数据已经初始化
                HttpContext.Current.Response.Write("Not Login");
            }
            else
            {
                HttpContext.Current.Response.Write("Session = " + HttpContext.Current.Session["Start"].ToString());
            }
        }
    }

     

     

    另外,你原来的判断好像有些问题,应该改为

     

    Code Snippet

    如果先赋值为0,则永远会去Login,呵呵,也可能你只是测试下

     

     

    if (HttpContext.Current.Session["Start"] == null || HttpContext.Current.Session["Start"].ToString() != "1")//如果数据没有初始化
    {
        HttpContext.Current.Session["Start"] = "1";//数据已经初始化
        HttpContext.Current.Response.Write("Not Login");
    }
    else
    {

        HttpContext.Current.Response.Write("Session = " + HttpContext.Current.Session["Start"].ToString());
    }

     

     

     

     

    2008年8月6日 13:31
    版主
  •  

    呵呵

      HttpContext.Current.Session["Start"] = "0";
    我是用来测试的

     

     我已经发现来问题  

      我把这个判断放在了构造函数中

     现在我重写了一个方法已经解决了这个问题

     

    谢谢你百忙之中来帮我解决问题

     良师益友啊

     

     我是个新手 以后还有很多问题要请教你

     

     现在我遇到了一个新问题就是

     

    我在退出页

     清理 session时 却获得不到值
    if (HttpContext.Current.Session["Start"]== null)

    HttpContext.Current.Session["Start"] = "";


    }

     

    我是把他放在这里面的

    namespace Discuz.ForumPage
    {
        /// <summary>
        /// 退出页面
        /// </summary>
        public class logout : BasePage
        {
         
            protected override void ShowPage()
            {

    if (HttpContext.Current.Session["Start"]== null)

    HttpContext.Current.Session["Start"] = "";


    }

    }

    2008年8月7日 2:34