ASP.NET 之深入浅出Session和Cookie

        在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习。

 Session是什么?

        简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,这个唯一的SessionID是有很大的实际意义的。当一个用户提交了表单时,浏览器会将用户的SessionID自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionID所对应的用户。除了SessionID,在每个Session中还包含很多其他信息。但是对于编写ASP或ASP.NET的程序与来说,最有用的还是可以通过访问ASP/ASP.NET的内置Session对象,为每个用户存储各自的信息。


Session 对象

          当您操作某个应用程序时,您打开它,做些改变,然后将它关闭。这很像一次对话(Session)。计算机知道是谁。它清楚在何时打开和关闭应用程序。但是在因特网上有一个问题:由于HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做了什么。


ASP 通过为每位用户创建一个唯一的cookie 的方式解决了这个问题。cookie 被传送至客户端,它含有可识别用户的信息。这种接口被称作 Session 对象。


Session对象用于存储关于用户的信息,或者为一个用户的 session 更改设置。存储于 session对象中的变量存有单一用户的信息,并且对于应用程序中的所有页面都是可用的。存储于 session对象中的信息通常是 nameid以及参数。服务器会为每个新的用户创建一个新的 Session,并在 session到期时撤销掉这个 Session对象。

 

 

Session 何时开始?


Session 开始于:

  • 当某个新用户请求了一个 ASP 文件,并且     Global.asa 文件引用了 Session_OnStart 子程序时;
  • 当某个值存储在 Session 变量中时;
  • 当某个用户请求了一个 ASP 文件,并且     Global.asa 使用 <object>标签通过 session scope来例示某个对象时;

 

  Session 何时结束?

假如用户没有在规定的时间内在应用程序中请求或者刷新页面,session就会结束。默认值为 20 分钟。

如果您希望将超时的时间间隔设置得更长或更短,可以设置Timeout属性。

下面的例子设置了 5分钟的超时时间间隔:

<%
Session.Timeout=5
%>
要立即结束 session,可使用 Abandon 方法:
<%
Session.Abandon
%>


 

人事档案中使用到的实例:

 

                //判断是否登陆成功
                if (user.Exists(enUser.userID, enUser.pwd))
                {

                   enUser= user.GetModel(enUser.userID);
                    //登录成功
                   Session["admin"] = enUser.realName; //txtUserName.Text.Trim();        //Session相当于一次会话,当关闭浏览器时菜终止会话。
                    //string strDateTime=DateTime.Now.ToString("yyyyMMddHHmmss");

                    Response.Redirect("List.aspx");


 

 

 

 

注意:使用session时主要的问题是它们该在何时结束。我们不会知道用户最近的请求是否是最后的请求。因此我们不清楚该让 session“存活”多久。为某个空闲的 session等待太久会耗尽服务器的资源。然而假如 session被过早地删除,那么用户就不得不一遍又一遍地重新开始,这是因为服务器已经删除了所有的信息。寻找合适的超时间隔时间是很困难的,所以如果正在使用 session变量,请不要在其中存储大量的数据。

 

 

Cookie 是什么?


      

       Cookie伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

 

        Cookie可以保持登录信息存放在咱们的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认的计算机(经过自身网站自己的加密算法加密了)到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私,不同的浏览器有不同的cookie值,各自属于自己的浏览器。

 


例如:csdn的登陆界面如果自己选择记住一周其cookie的生命周期就是一周,等到了一周后会自动销毁。



Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息(登陆网上银行的个人信息),更加安全。


Cookie的创建:

ASP.NET中的cookie:创建Cookie方法 (1)

 Response.Cookies["userName"].Value = “admin";
  Response.Cookies[“userName”].Expires = DateTime.Now.AddDays(1);   //如果不设置失效时间,Cookie信息不会写到用户硬盘,浏览器关闭将会丢弃。



ASP.NET中的cookie:创建Cookie方法 (2)

 HttpCookie aCookie = new HttpCookie(“lastVisit”); //上一次访问时间
  aCookie.Value = DateTime.Now.ToString();
  aCookie.Expires = DateTime.Now.AddDays(1);
  Response.Cookies.Add(aCookie); 


ASP.NET中的cookie:访问Cookie方法

if(Request.Cookies["userName"] != null)
  Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);访问Cookie方法(2)
  if(Request.Cookies["userName"] != null)
  {
  HttpCookie aCookie = Request.Cookies["userName"];
  Label1.Text = Server.HtmlEncode(aCookie.Value);
  } 



 3:两者的区别与联系

 

 

 

 

总结

        Cookie的使用最主要的注意事项时其生命周期和其安全性,如何防止Cookie的欺骗是后续深入研究学习的,安全性上讲,伪造session要比cookie难得多,session相对更安全一些.为了数据的安全与访问方便,我们要好好的使用两者为我们的软件做好服务,为客户提供可靠的数据。


原文地址:https://www.cnblogs.com/riskyer/p/3236997.html