在asp.net的web页面中是不是没有全局变量?是不是只能用session,cookie等来实现全局变量?
web页面中的static变量是不是全局变量?使用static变量发现总出问题,有时正常,有时异常一何缘故?
sesssion一定要在global.asx中初始化定义吗?
问了这么多问题,所有的分都贡献出来了,也不多,不好意思,就希望有高手能解决!谢谢!

解决方案 »

  1.   

    是不是只能用session,cookie等来实现全局变量?    一般情况是用session,cookie来存储
    web页面中的static变量是不是全局变量?           不是sesssion一定要在global.asx中初始化定义吗?      不,可以在任何的页面定义
      

  2.   

    在asp.net的web页面中是不是没有全局变量?
    有的,在Class类内部的都是,只不过在WebWofm程式中跟WinForm和Console程式有些区别,
    当页面刷新时,它们的值不会保持,依然会再次初始化.
    Q:在WebForm中,一般用ViewState辅助存储全局变量的值.是不是只能用session,cookie等来实现全局变量?
    Q:用ViewStateweb页面中的static变量是不是全局变量?使用static变量发现总出问题,有时正常,有时异常一何缘故?
    Q:是全局变量,但最好不要用,在分布式程序中,如果几个客户端都在访问同一个界面,则
    这些界面中的static类型的对象都是共享的,也就是说一个客户端此时修改了本界面中的static
    对象的值,其它用户界面中的static值也会跟着改变. 会导致不可预料的情况发生session一定要在global.asx中初始化定义吗?
    Q:Session存储在服务端,当客户端第一个界面启动时,它就产生了,可以在所有页面中用.
      具体用法请看:
      几种常用的变量:
    Application是应用程序级变量,如果用到多个用户之间的通信的时候用
    Session    是用户变量,一个用户访问多个页面时可以保存数据到另一个页面,只要此用户不注销就可以
    ViewState  页面变量,相当于页面全局变量,但是一旦退出当前页面,它就会丢失
     
    用法:
    如果有两个人: 甲和已在同学访问一个网站
    1.
    Sessin["UserID"] = "甲";//  表示只要甲不注销,不文伦跳到哪个页面,string str = Session["UserID"]都保存初始化时的数据,常用于在: Page_Load事件中,验证身份
    page_Load()
    {
     if(Session["UserID"] == null || Session["UserID"] == "")
     {
       Response.Redirect("登录页面,重新登录");
      }
      else
      {
         呈现出页面
      }
    }
    2. 
    Application["x"];
    只要赋了值,如: Application["x"]; 则甲和已可以共享到此值,可以用于计数器,记录站点访问量
    只要一个用户登录,则Application["x"] += 1;//加一个数,表示有个新用户刚刚登录
    3.
     this.ViewState["y"] = "abcde";
     则表示在本页面中,this.ViewState["y"] 值可以作为全局变量使用,只要不退出本页面,
     包括刷新页面,它都不会丢失
    4.cookie
    string a="a";
    HttpCookie Cookie = new HttpCookie(a);
    Cookie.Values.Add(a,"abc");
    // 设置过期时间.
    DateTime datCookie = DateTime.Now;
    int intCookieTimeOut = 30;
    TimeSpan tsCookie = new TimeSpan(intCookieTimeOut,0,0,0);
    Cookie.Expires =  datCookie.Add(tsCookie);
    try
    {
    Response.Cookies.Remove(a);
    }
    catch{}
    Response.Cookies.Add(Cookie);
         
      

  3.   

    一、
    在会话作用域内的变量,使用Session集合保存。在应用程序作用域内的变量,使用Global.asax中的public保存或者Application集合保存。对于页面作用域内的变量,使用ViewState。asp.net中的页面对象,仅仅在请求回发到服务器上以及最终生成给客户端的html命令这个“瞬间”存在(一个页面实例)。因此,尽管客户在同一个页面上反复操作(回发),其实每一次提交数据都在服务器端产生一个完全不同的页面实例,页面上的数据是靠ViewState与外界存储设备(例如网页本身)交换数据来保持的。连页面尚且没有“全局”变量(相对于WinForm窗口而言的),更“大”的asp.net对象更是没有,而都是通过外部存储来维持的。二、
    c#的static并不是局部的意思,而是“静态”的意思。它存在于assembly中。asp.net会随时重新启动应用程序(以便解决web应用服务器遇到的运行时问题,提高web服务的可靠性),例如应用程序的bin中的文件被修改、配置文件被修改时、内存不够时、iis要求定时重起isapi时、维护人员在网站运行时上传应用程序内文件,等等,这时候都会让进程重起,assembly也就被重新加载。至于一些比较灵活的应用程序,更是运行时动态加载和卸载assembly,这就更会丢弃其中的static变量。asp.net中,static变量就同inproc方式的session一样,随时会被重新初始化。不要怪系统,应该怪程序员错误地用简单的过去c++小程序的思路去设想web服务程序的运行机制。三、
    从来没有听说session一定要在global.asax中初始化,也不知道是何道理?!
      

  4.   

    一定要把asp.net的工序流程好好看看。所谓的全局变量无非是作用域的范围覆盖整个应用程序而已。 
    application变量 应用程序级别 
    session变量 会话级别
    这两个就可以搞定页面之间传递消息的问题
    静态变量 我感觉没有必要使用。应为你仔细看源代码就可以知道aspx 和 aspx.cs之间的关系
    在aspx.cs文件中 即真正的代码文件 他的字段全是protected而不是private 想想是为什么 
    推荐楼主好好回顾一下asp.net的基础知识。
      

  5.   

    多谢各位指点,特别是ChengKing(http://blog.csdn.net/ChengKing) , sp1234,学到了好多东西!
      

  6.   

    使用static变量发现总出问题,有时正常,有时异常一何缘故?好象是所有用户上着个也面着个变量都是一样的.
    所以有时正常,有时异常一何缘故.
      

  7.   

    //****创建一个基类,然后继承他//*****例如
    namespace web
    {
        public class BasePage
        {       public BasePage(){}       private static string msitename;       public string SiteName
           {
              get{return msitename;}
              set{msitename=value;}
           }
       }}
    //*****继承类
    namespace webfrmlist
    {
        public class frineduserlist:BasePage
        {
           public frineduserlist(){}
     
           //****调用基类函数进行处理
        }}