• 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以文件的形式保存的请求信息

  • 相关阅读:
    微信小游戏和白鹭引擎开发实践
    css3D的魅力
    微信开发相关,了解一下
    谈程序员如何做好业务
    《母亲》
    2017最后一天回顾这一年
    从无到有<前端异常监控系统>落地
    记录项目版本升级angular4 ~ angular5
    一个程序员送给大学生弟弟的那些话
    [认证 & 授权] 3. 基于OAuth2的认证(译)
  • 原文地址:https://www.cnblogs.com/DSC1991/p/8038049.html
Copyright © 2020-2023  润新知