zoukankan      html  css  js  c++  java
  • C#中Cookie,Session,Application的用法与区别?

    1.Application 储存在服务端,没有时间限制,服务器关闭即销毁(前提是自己没写销毁方法) 
    2.Session 储存在服务端,客户端(浏览器)关闭即销毁(若长时间不使用 且 浏览器未关闭的情况下, 默认自动销毁时间为20分钟) 

    3.Cookie 储存在客户端,由用户自己销毁 

    application:
    程序全局变量对象,对每个用户每个页面都有效
    session:
    用户全局变量,对于该用户的所有操作过程都有效
    cookie:
    客户端信息存放对象,可以把用户的信息保存在用户的本地,
    不必总是访问服务器
    Application用于保存所有用户共用的数据信息,如果被保存的数据在应用程序生存期内根本不会改变或很少改变,用它。但是在asp.net中有个web.config,可能更好点。如果要使用application,一个需要考虑的问题是任何写操作都有要在application_onstart事件中(Global.asax)中完成。尽管使用application.lock和application.unlock方法来避免操作的同步,但是它串行化了对application的请求,当网站访问量大时会造成性能瓶颈。因此最好不要用它存取大的数据集
    使用方法:
    //存放信息
    Application["test"] = "100";
    //读取
    String test = Application["test"].ToString();

    Session 用于保存每个用户的专用信息,它的生存期是用户持续请求时间再加上一段时间(可以在web.config中设置,默认是20分钟)。Session中的信息保存在服务器的内存中,当然你也可以设置它的保存方法(如存在SQL数据库中)。由于用户停止使用程序后它仍然在内存中保持一段时间,因此使用Session对象保存用户数据的方法效率很低。对于小量的数据。使用Session还是一个不错的选择。

    ASP Session的功能的缺陷
      目前ASP的开发人员都正在使用Session这一强大的功能,但是在他们使用的过程中却发现了ASP Session有以下缺陷:

      进程依赖性:ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。 
      Session状态使用范围的局限性:刚一个用户从一个网站访问到另外一个网站时,这些Session信息并不会随之迁移过去。例如:新浪网站的WWW服务器可能不止一个,一个用户登录之后要去各个频道浏览,但是每个频道都在不同的服务器上,如果想在这些WWW服务器共享Session信息怎么办呢? 
    Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。


    //存
    Session["user"] = "majcms";
    //取
    String username = Session["user"].ToString();

    在web.config中进行如下配置
      <system.web>
      <sessionState mode="InProc" timeout="30"/>
      </system.web>

    Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它保存非敏感性的内容。保存时间可以根据需要设置。如果没有设置Cookie失效时间,它仅保存至浏览器关闭。如果将Cookie设置为Min Value,则表示它永不过期。Cookie存储量受到很大限制,一般浏览器支持最大容量为4096字节。因此不能用来存储大量数据。由于并非所有浏览器都支持Cookie,并且它是以明文方式保存的,所以最好不要保存敏感性的内容。否则会影响网络安全

    //创建、写入Cookie

        HttpCookie cookie = Request.Cookies["MWS_User"];

        if (cookie == null)

        {

              cookie = new HttpCookie("MWS_User");

        }

        cookie.Values.Set("UserID", strUserID);

        Response.SetCookie(cookie);

    二、读取cookie:

    HttpCookie cookie = Request.Cookies["MWS_User"];

    if (cookie != null && cookie["UserID"].ToString() != "")

    {

          Response.Write("cookie=" + cookie["UserID"].ToString());

     }


    //存
    Response.Cookies["name"].Value = "majcms";
    //取
    String username = Response.Cookies["name"].Value;

    ---------------------------------------------------------------------

    //写入
      protected void Button1_Click(object sender, EventArgs e)
      {
        HttpCookie cookie=new HttpCookie("MyCook");//初使化并设置Cookie的名称
        DateTime dt=DateTime.Now;
        TimeSpan ts = new TimeSpan(0, 0, 1,0,0);//过期时间为1分钟
        cookie.Expires = dt.Add(ts);//设置过期时间
        cookie.Values.Add("userid", "userid_value");
        cookie.Values.Add("userid2","userid2_value2");
        Response.AppendCookie(cookie);
        //输出该Cookie的所有内容
        //Response.Write(cookie.Value);//输出为:userid=userid_value&userid2=userid2_value2 
      }

      //读取
      protected void Button2_Click(object sender, EventArgs e)
      {

        // HttpCookie cokie = new HttpCookie("MyCook");//初使化
        if (Request.Cookies["MyCook"]!=null)
        {
          //Response.Write("Cookie中键值为userid的值:" + Request.Cookies["MyCook"]["userid"]);//整行
          //Response.Write("Cookie中键值为userid2的值" + Request.Cookies["MyCook"]["userid2"]);
          Response.Write(Request.Cookies["MyCook"].Value);//输出全部的值
        }
      }

      //修改Cookie
      protected void Button3_Click(object sender, EventArgs e)
      {
        //获取客户端的Cookie对象
        HttpCookie cok = Request.Cookies["MyCook"];
            
        if (cok != null)
        {
          //修改Cookie的两种方法
          cok.Values["userid"] = "alter-value";
          cok.Values.Set("userid", "alter-value");

          //往Cookie里加入新的内容
          cok.Values.Set("newid", "newValue");
          Response.AppendCookie(cok);
        }      
      }

      //删除Cookie
      protected void Button4_Click(object sender, EventArgs e)
      {

        HttpCookie cok = Request.Cookies["MyCook"];
        if (cok != null)
        {
          if (!CheckBox1.Checked)
          {
            cok.Values.Remove("userid");//移除键值为userid的值      }      else      {        TimeSpan ts = new TimeSpan(-1, 0, 0, 0);        cok.Expires = DateTime.Now.Add(ts);//删除整个Cookie,只要把过期时间设置为现在      }      Response.AppendCookie(cok);   

                      } 

                  }

    session: 该对象是HttpSession 类型的对象,描述一个客户端与服务器之间的一次通话时
    段,该段时间内包含客户端的若干次请求和服务器的相应响应,整个时间段session 对象都
    存在。常用来实现购物车之类的存储当前用户的数据。不同用户有各自的不同session 对象。
    application: 该对象是ServletContext 类型的对象,描述的是本身Web 程序。该对象在
    Web 程序部署到tomcat 服务器时由容器产生,其生命周期至Web 程序从tomcat
    服务器卸载出去时消失。是所有客户端能共享的一个
    全局对象,整个系统只有一份。
    Cookie以文件的形式保存的请求信息

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/DSC1991/p/8038049.html
Copyright © 2011-2022 走看看