【ASP.NET】session与cookie的比较

简介: <span style="font-family:楷体; font-size:14pt; line-height:1.5; widows:auto">    在这次的考试维护中,温习了很多旧知识,也学习到了很多新知识。本篇博客想要和大家一起分享的是session和cookie的联系和区别。</span><br style="font-family:楷体; font-size:19px; l
    在这次的考试维护中,温习了很多旧知识,也学习到了很多新知识。本篇博客想要和大家一起分享的是session和cookie的联系和区别。
【项目概要】
    开发中,免不了会需要这样一种变量,在此阶段并没有它,但它出现在之前阶段或者其它方法中,我们就需要把它存储着,使得我们可以方便的获取它的值。在C/S开发下,我们可以定义全局变量;那么在B/S开发下,我们要用到的就是session或cookie了。
【项目背景】
    在此次开发调查问卷系统中,有几个变量我们是随时需要的,比如:专业、课程、登录用户等。于是,洲就让我把它们都存放在session中,因为系统中已经有用过session存放用户登录信息了。专业、课程如此就可以解决随时随处获取值了。
【项目疑问】
    之前,我一直都把专业和课程这样的额变量一直存放在session中,但等到系统快要完成的一个晚上,我脑海中出现了一个cookie的概念,我就想,我可不可以把这些变量放在cookie中呢?如果可以,放在cookie和放在session中,两者又有什么样的不同呢?于是,我便开始寻找问题的答案了。
【项目开发】
    (1)先看一下我使用Session存储变量的代码:
        /// <summary>
        /// 当下拉框选择专业时,将选择的专业信息存放在Session中——胡志婷——2016年1月8日16:23:27
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void dropCollege_SelectedIndexChanged(object sender, EventArgs e)
        {
            //获取专业信息
            string departmentName = dropCollege.SelectedValue.ToString().Trim();
            //将专业名称存入Session中
            Session["departmentName"] = departmentName;
        }  
    当我在其它方法也需要用到这两个值时,直接从Session中获取即可:
        /// <summary>
        /// 导出为Excel——胡志婷——2016年1月8日16:24:48
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lbnExportExcel_Click(object sender, EventArgs e)
        {
            //专业信息
            string departmentName = dropCollege.SelectedValue.ToString().Trim();
            //课程信息
            string courseName = dropCourse.SelectedValue.ToString().Trim();
            //为空判断
            if (departmentName == "" || courseName == "")
            {
                return;
            }
            ///实例化多选答案实体
            CheckAnswerEntity checkanswerentity = new CheckAnswerEntity();
            ///从Session中获取课程信息
            checkanswerentity.CourseName = Session["courseName"].ToString().Trim();
            ///从Session中获取专业信息
            checkanswerentity.MajorName = Session["departmentName"].ToString().Trim();  
        } 
    (2)下面是我利用Cookie存储课程和专业信息的代码:
        /// <summary>
        /// 当下拉框选择专业时,将选择的专业信息存放在Session中——胡志婷——2016年1月8日16:28:04
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
protected void dropCollege_SelectedIndexChanged(object sender, EventArgs e)
        {
            //获取专业信息
            string majorName = dropCollege.SelectedValue.ToString().Trim();
            //实例化一个Cookie对象,创建并命名新的cookie
            HttpCookie majorNameCookie = new HttpCookie("majorName");
            //设置单个cookie的值
            majorNameCookie.Value = majorName;
            //将指定的cookie保存到Cookies集合中
            Response.Cookies.Add(majorNameCookie);
        } 
    当我在其它方法也需要用到这两个值时,直接从Cookie中获取即可:
        /// <summary>
        /// 导出为Excel——胡志婷——2016年1月8日16:29:27
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
    protected void lbnExportExcel_Click(object sender, EventArgs e)
        {
            //专业信息
            string departmentName = dropCollege.SelectedValue.ToString().Trim();
            //课程信息
            string courseName = dropCourse.SelectedValue.ToString().Trim();
            //为空判断
            if (departmentName == "" || courseName == "")
            {
                return;
            }
            //实例化单选答案实体
            SingleAnswerEntity singleanswerentity = new SingleAnswerEntity(); 
            //从Cookie集合中获取课程信息        
            singleanswerentity.CourseName = Request.Cookies["courseName"].Value;
            //从Cookie结合中获取专业信息    
            singleanswerentity.MajorName = Request.Cookies["majorName"].Value;
        }
【项目解疑】
    事实证明,不论我用session还是cookie存放变量值,都是可以在其他地方获取到的。那么,session和cookie有区别吗?下面就一起学习学习啦。
    (1)cookie和session的机制:
    由于Http协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是session。
    典型的场景比如购物车,当点击下单按钮时,由于Http协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的session,用于标识和跟踪用户,这样才知道购物车中的信息。这个session是保存在服务端的。
    然而,服务端如何识别特定的客户呢?这个时候cookie就登场了。每次HTTP请求的时候,刻画段都会发送响应的cookie信息到服务端。实际上大多数的应用都是用cookie来实现session跟踪的。
    如果客户端的浏览器禁用了cookie怎么办呢?一般这种情况下,会使用一种叫URL重写的技术来进行会话跟踪,即每次Http交互,URL后面都会被附加上一个诸如sid=***这样的参数,服务端据此来识别用户。
    平时,我们经在自己电脑上登录一些经常性的、固定性的网站,都会保存相应的账号和密码,下次就可以自动登录了。这个信息其实就是存放在cookie中了,给予用户很大的方便。这也是cookie名称的由来,给用户的一点甜头。
    (2)cookie和session的区别:
    i)cookie数据存放在客户的浏览器上,session数据放在服务器上。
    ii)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
    iii)session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能。
    iiii)单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。
    所以,大多数情况下,是将登录等重要信息存放在session中,其它信息如果需要保存,可以放在cookie中。
【项目总结】
    其实,在此之前,其它项目中也早已用到了session或者cookie存放数据,自己也看过很多博客,写的都是两者的比较。
    然而, 自己并没有亲身体会,去应用,去比较,所以,只是留下了印象。
     也正是因为如此,在这个项目中,自己的多次用到,好像条件反射一般,很自然而然地就想到了将session换成cookie尝试一下,通过自己的实践,也解答了自己的疑惑,也更加理解了两者之间的联系和区别。
     所以,平时的耳濡目染,平时的潜移默化,平时的润物无声,终会有破茧成蝶了时候。
目录
相关文章
|
24天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
47 4
|
27天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
2月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
170 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
2月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
24 1
|
3月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
3月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
3月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
63 0
|
4月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
221 1
|
4月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
64 1
|
4月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
252 0