• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETApplication,Session,Cookie和ViewState等对象用法和区别(转)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

     

 ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewStateCache等。下面分别介绍它们的用法和区别。

方法

信息量大小

作用域和保存时间

应用范围

保存位置

Application

任意大小

整个应用程序的生命期

整个应用程序/所有用户

服务器端

Cache

任意大小

可以根据需要设定

整个应用程序/所有用户

服务器端

Session

小量,简单的数据

用户活动时间+一段延迟时间(一般为20分钟)

单个用户

服务器端

Cookie

小量,简单的数据

可以根据需要设定

单个用户

客户端

Viewstate

小量,简单的数据

一个Web页面的生命期

单个用户

客户端

隐藏域

小量,简单的数据

一个Web页面的生命期

单个用户

客户端

查询字符串

小量,简单的数据

直到下次页面跳转请求

单个用户

客户端


 1.Application
对象

         Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.asax)中完成.尽管使用Application.LockApplicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合. 下面我们做个在线用户统计的例子来说明这个问题
    (
以文件的形式存放网站总访问量)

Global.asax

using System;
using
 System.Collections;
using
 System.ComponentModel;
using
 System.Web;
using
 System.Web.SessionState;
using
 System.IO;
    /// Global 的摘要说明。

 
    public class Global : System.Web.HttpApplication
    {
        /// 必需的设计器变量。

        private System.ComponentModel.IContainer components = null;

        
private
 FileStream fileStream;
        
private StreamReader reader;//读字符流

        private StreamWriter writer;//写字符流
        
        
public
 Global()
        {
            InitializeComponent();
        }    

        
protected void
 Application_Start(Object sender, EventArgs e)
        {
            Application["CurrentGuests"]=0;
//初始花为0;

            fileStream = File.Open(Server.MapPath("counts.text"),FileMode.OpenOrCreate);//文件不存在,创建文件
            reader = new StreamReader(fileStream);//要读取的完整路径
            Application["AllGuests"] = Convert.ToInt32(reader.ReadLine()); //从当前流中读取一行字符并将数据作为字符串返回
            reader.Close();//关闭流
        }
 
        
protected void Session_Start(Object sender, EventArgs e)//当用户访问网站时,在线用户+1,总访问数+

        {
            Application.Lock();
//同步,避免同时写入

            
            Application["CurrentGuests"] =(
int)Application["CurrentGuests"]+ 1;//总在线用户数

            Application["AllGuests"] =(int)Application["AllGuests"]+ 1;//访问网站的总用户数
            fileStream = new FileStream(Server.MapPath("counts.text"),FileMode.OpenOrCreate,FileAccess.ReadWrite);//
            writer = new StreamWriter(fileStream);//实现一个写入流,使其以一种特定的编码向流中写入字符

            writer.WriteLine(Application["AllGuests"].ToString());//把访问网站的总用户数再次写入到文件
            writer.Close();//关闭写入流

            Application.UnLock();
//同步结束
        }
        
protected void Session_End(Object sender, EventArgs e)//当前用户退出网站时,在线用户数量
-1,
        {
            Application.Lock();
            Application["CurrentGuests"] =(
int)Application["CurrentGuests"] - 1;//总在线用户数量
-1
            Application.UnLock();    
        }
    (2) WebForm1.aspx
    
private void Page_Load(object
 sender, System.EventArgs e)
        {
            
this.Label1.Text = "正在访问站点的用户数:
" + Application["CurrentGuests"].ToString();    
            
this.Label2.Text ="访问过站点的总用户数:
" + Application["AllGuests"].ToString();
        }

2.Session对象
      Session
用于保存每个用户的专用信息.每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话IDSession ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择.使用Session对象保存信息的代码如下:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[ZT]Asp.net页面传递参数的几种方法对比讲解发布时间:2022-07-10
下一篇:
Asp.NETMVC+WebAPI跨域调用发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap