Application,Session,Cookie你能分的清吗?--【Asp.Net】

背景:

  每个东东产生的时候都是有原因滴,我个人觉得,这几种方式跟缓存很类似,都是把常用的一些数据放到缓存里面先存起来,比直接从内存或硬盘中读取更加的迅速,从而提高效率。Application,Session,Cookie是Asp.Net中常用的三种存取临时数据的方法。

Application/session/Cookie对比:


对比


Session


Application


Cookie


作用


用于保护用户的专用信息


用于保存所有用户的公共数据信息。


用于保护客户浏览器请求服务器页面的请求信息


使用


多人


全局


单个


共享


No


Yes


No


有效期


个人退出20分钟(可设),存数据效率低


程序周期,

会消失,考虑写入文件或数据库

访问过大会造成性能瓶颈


自定义,关闭浏览器会消失


数据


少,简单,单个用户,单个链接


任意


少,简单,非敏感


位置


服务器端


服务器端


客户端

登陆实战演练:

用户登陆采用Cookie保存用户信息,Session保存用户名,Application计算访问量。整个业务逻辑是,用户先进行登陆,登陆了之后进入一个新的页面,显示登陆的人数和登陆者的姓名。

login.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace demo5
{
    public partial class Login : System.Web.UI.Page
    {

        //登陆时点击登陆按钮

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            //写入cookie
            Response.Cookies["username1"].Value = txtUserName.Text;
            //设置cookie保存时间
            Response.Cookies["username1"].Expires = DateTime.Now.AddDays(1);
            //判断用户名是否为空
            if (Request.Cookies["username1"] != null)
            {   //session获取用户名
                Session["username1"] = Request.Cookies["username1"].Value;
                //跳转到欢迎页面
                Response.Redirect("Welcome.aspx");
            }

        }

    }
}

login.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="demo5.Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
        <asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="登陆" />

    </div>

    </form>

</body>
</html>

结果页面:

跳转的新的页面:

Welcome.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace demo5
{
    public partial class Welcome : System.Web.UI.Page
    {

        //加载欢迎页面
        protected void Page_Load(object sender, EventArgs e)
        {
            //如果session内部的用户名为空
            if (Session["username1"] != null)
            {//打印字符串内容
                string conent = "欢迎" + Session["username1"] + "进入ASP.NET";
                Response.Write(conent);
                //如果全局变量不为空
                if (Application["SessionCount"] != null)
                {
                    labApplication.Text = Session["username1"] + "共登陆了" + Application["SessionCount"].ToString() + "次";
                }
            }

        }

    }
}

Welcome.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Welcome.aspx.cs" Inherits="demo5.Welcome" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="labApplication" runat="server" ></asp:Label>

    </div>
    </form>
</body>
</html>

global.asax

        protected void Application_Start(object sender, EventArgs e)
        {

            //全局计数器 计数+1
            Application["SessionCount"] = 0;

        }

        protected void Session_Start(object sender, EventArgs e)
        {
            Session["username1"] = 0;
            //在新回话启动时运行的代码
            Application.Lock();
            //全局计数器 计数+1
            Application["SessionCount"] = (int)Application["SessionCount"] + 1;
            Application.UnLock();

        }

登陆成功页:

现象分析:

1.如果登陆了之后,再打开一个浏览器页面,浏览同样的网址,登陆次数会+1,说明Application在整个程序的生命周期中都起作用,而且可以被多个用户访问,保存公共的用户数据信息.

2.有的时候,关闭了浏览器,立即重新启动程序,用户名仍然是之前的那个用户名,证明Session是具有时效性的。

总结:

做demo的时候并不是很顺利,不过完成之后是很有成就感的,80分有的时候真的比100分实惠。

时间: 2024-08-24 10:57:09

Application,Session,Cookie你能分的清吗?--【Asp.Net】的相关文章

Application,Session,Cookie,ViewState和Cache区别

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

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

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

系统对象与状态管理  原文   http://www.cnblogs.com/liaoqiang/archive/2010/01/30/1660021.html Page对象Page对象是指向页面自身的方式,在整个页面的执行期内,都可以使用该对象示例: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="defautl.aspx.cs" Inherits="_defaul

[区别]APPlication,Session,Cookie,ViewState和Cache

原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?     为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简

ASP.NET:Application,Session,Cookie,ViewState和Cache之间的区别(转)

在ASP.NET中,有很多种保存信息的对象.例如:Application,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量.简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cookie 小量

ASP.NET:Application,Session,Cookie,ViewState和Cache之间的区别

在ASP.NET中,有很多种保存信息的对象.例如:Application,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量.简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cookie 小量

老生常谈session,cookie的区别,安全性

一,为什么session,cookie经常会有人提到 做web开发的人基本上都会用session和cookie,但是仅仅只是会用,并不知道session和cookie的真正的工作原理,都只是凭着感觉来猜测.web开发者只要利用它们来完成工作就行了,所以每个人的理解基本都会有大同小异,我想这就是session,cookie经常会被讨论的原因.本文也是根据个人经验,以及个人所学,对session,cookie的一些看法,纯属个人见解,希望得到大家的更正和建议. 二,什么cookie cookie分为

认证 协议 JWT OAuth Session Cookie

本文翻译自Auth-Boss. 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法.认证指的是创建一个系统的过程,用户可以通过该系统"登录"在线服务,并授予对受保护资源的访问权限.以下引用可能更好地总结我想要解释的内容: 客户端认证涉及向Web上的服务器证明客户端(或用户)的身份.[1] How 我写作风格简洁,会用到一些技术词. 免责声明:本文档不作为包含所有认证方法的网络的目录;本文档也

Android HTTP session &amp;&amp; cookie

HTTP协议与状态保持HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样.         然而聪明(或者贪心?)的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样.这种需求一方面迫使HTML逐步添加了表单.脚本.DOM等客户端行为,另一