AspNet 内建对象的简介、区别(Application\Session\Cookie\Response\Request\Server\Page\Exception)

  1.Cookie

Cookie的比较确切的定义应该是这个样子:

“Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。信息的片断以‘名/值’对(name-valuepairs)的形式储存。”

举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。

 

简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都记录下来。当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。

 

如果你实在不喜欢Web服务器乱丢饼干(Cookie)到你家,当然可以让浏览器拒绝网站存放Cookie到你的计算机。只要在IE的“工具”菜单下选择“Intertnet选项”的“安全”,按自定义级别,将Cookie部分设为关闭,按确定,关闭浏览器,再重新启动浏览器即可。当你关闭Cookie之后,很多网站的个人化服务功能很可能也不能再使用了.

2. Session

Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串.

除了SessionID,在每个Session中还包含很多其他信息。但是对于编写ASP或ASP.NET的程序与来说,最有用的还是可以通过访问ASP/ASP.NET的内置Session对象,为每个用户存储各自的信息。

ASP Session的功能的缺陷 :

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

       Session Cookie 区别 :
Session是存在服务器端的;而Cookie是存在客户端的!!

Session更不需要Cookie来支持和不会受浏览器端的设置影响,可记录每个访问者的信息,独立在服务器端,比Cookie安全!

Session是存在内存中的,浏览器关闭它也就“死”了;Cookie是以文件方式存在的,可以修改其“存活”时间。

      Session Cookie结合保存用户状态:

session默认的保存时间是20分钟,一般来说只要是浏览器不关闭,我们也可以修改session的超时时间,但是我在一次操作中尝试直接修改session的Timeout,修改Global文件,Config文件均告无效。使用session和cookie联合的方式来解决问题。这样即使在关闭浏览器之后,我们依然可以找回之前的session。

此方法的思路是:就是把seeion存储进数据库中,然后把seesion的唯的ID写到客户机的cookie中去,这样子就不会因为seesion的短时间性而丢失了。

1.在用户登录时同时保存用户的session和cookie信息

                HttpContext.Current.Session.Clear();

                HttpContext.Current.Session["curUser"] = loginUser;//loginUser为保存用户信息的实体类

                Request.Cookies.Clear();

                Response.Cookies.Clear();

                HttpCookie cookie = new HttpCookie("LoginInfo");//新建一个cookie

                DateTime dt = DateTime.Now;

                TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);//时间一天

                cookie.Expires = dt.Add(ts);



                cookie.Values.Add("ID", loginUser.ID.ToString());//为新建的cookie添加键和值
Login.aspx

2.在其他页面可以根据客户端的cookie而重新设置session信息

        /// <summary>

        /// 判断Session超时

        /// </summary>

        public static void IsLogin()

        {

            object um = HttpContext.Current.Session["curUser"];

            object cook = HttpContext.Current.Request.Cookies["LoginInfo"];

            bool ok = false;

            try

            {

                if (um != null)

                {

                    ok = true;

                }

                else//Cookie重新写入Session  

                {

                    if (HttpContext.Current.Request.Cookies["LoginInfo"] != null)

                    {

                        HttpContext.Current.Session["curUser"] = null;



                        int User_ID = int.Parse(HttpContext.Current.Request.Cookies["LoginInfo"]["ID"].ToString());

                        Model.User Muser = new User(User_ID);//数据库操作,由用户ID查询所有的用户信息



                       

                        HttpContext.Current.Session["curUser"] = Muser;//重新设置session信息

                        ok = true;

                    }

                    else

                    {

                        ok = false;

                    }

                }

            }

            catch (SystemException ex)

            {

                HyDebug.WriteToDoc("110:"+ex.Message);//HyDebug可以用直接写入文本的方式在网站发布之后查看我们的调试信息

                ok = false;

            }

            if (ok == false)

            {

                System.Web.UI.Control con = new Control();

                HttpContext.Current.Response.Write("<script>top.window.location.href='" + con.ResolveUrl("~/Login.aspx") + "';</script>");

                HttpContext.Current.Response.End();

            }



        }
index.aspx

 

 

 

 

 

 

 
  

 

你可能感兴趣的:(application)