Cookie详解、ASP.NET核心知识(7)
无状态的http协议
1.回顾http协议
Http协议是请求响应式的,有请求才有响应,是无状态的,不会记得上次和网页“发生了什么”。
关于http协议的这种特点,黑兔在前面的这三篇博文中进行了详细的阐述。感兴趣的童鞋们可以去吐槽。
前文链接:
2.案例、弊端
说过了http协议的特性,接下来举一个简单的例子,来引出我们得矛盾。
//html:
<form action="IncLabel.ashx" method="post">
<input type="text" name="i" value="@i" />
<input type="submit" name="btn1" />
</form>
//ashx:
int i = ;
if (!string.IsNullOrEmpty(context.Request["btn1"]))
{
i = Convert.ToInt32(context.Request["i"]);
i++;
}
string html = HtmlFileLoader.Load("~/IncLabel.html");
html = html.Replace("@i", i.ToString());
context.Response.Write(html);这个案例中,html像ashx发出请求。提交按钮无论点击多少次,页面都只会显示 1。而不会继续增长。
Http协议不会记得上次和网页“发生了什么"。服务器不记的上次给了浏览器什么,否则服务器的压力会太大。每次请求到达asp.net,都创建一个HttpHandler的新对象来处理。
但是现实开发中经常遇到这样的需求。如何解决这个矛盾呢?3.如何进行状态的传递和保存?
对于如何进行服务器/浏览器之间的状态保存呢? 我这里有两个答案。
1)把信息记录在页面保单中
对浏览器响应结束之前将状态信息保存到页面表单中,下次页面再向服务器发出请求的时候带上这些状态信息,这样服务器就能根据这些状态信息还原上次的状态了,类似于去看病的病历本。如果觉得显示出来这个form对象不合适,就把这个input设置成隐藏。
这就是webform的做法,用起来很方便,但是html会很臃肿。
2)利用Cookie、Session等状态保存的机制
说了这么多,我们接下进入正题,来说Cookie
认识Cookie
1.Cookie存贮位置
Cookie存储在浏览器端,对于设置了Cookie的站点,
浏览器会通过http请求报文的方式,把本机的Cookie信息,发送给服务器。
而服务器,会对Cookie进行设置。并通过响应报文返回给浏览器。
2.读取、设置Cookie
设置值的页面:
Response.SetCookie(new HttpCookie("UserName", username));
读取值的页面:
string username= Request.Cookies["UserName"].Value;
3.Cookie的失效时间
//DateTime的AddDays就是在这个DateTime的基础上增加20天,返回新的DateTime对象
//如果不设定Expires超时时间,则关闭浏览器后Cookie失效
//如果设定Expires,则即使关闭浏览器,除非到期,否则再次打开浏览器,还能读取
cookie.Expires = DateTime.Now.AddDays();
context.Response.SetCookie(cookie);值得注意的是,Expires设置的内容类似于保质期到2015/4/23。而不是保质期一个月。你知道我什么意思的!
4.键值对存储
new HttpCookie("UserName", username)。//应该不用多说
其实还有含值键值对,文章后面写一下,但是坦率的说我没用过。
Cookie路径问题
1.Path
path表示cookie所在的目录,
a)默认“/”
asp.net默认为/,就是根目录。如果要整个域名都可以访问,就要设置Path为“/”。
b)为空
Path为空,则只有当前页面所在目录的页面能够读取,子文件夹都不行。
c)细说路径问题
在同一个服务器上有目录如下:/web/path1/、/web/path2/
2.Domain
domain表示的是cookie所在的域(域名)
1)默认
默认为请求的地址,如果为www.baidu.com/test/test.aspx,那么domain默认为www.baidu.com。
但是默认domain的cookie无法跨域访问。例如 teiba.baidu.com,无法访问cookie。
2)跨域名的domain
如果想让一个站点的所有子域名都可以访问一个cookie。
例如 tieba.baidu.com 和 www.baidu.com。
这时就要设置 domain为 ".baidu.com"。
ps:浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。
3.含值键值对
含多个子键值对的cookie格式是name=key1=value1&key2=value2。
可以理解为单键值对的值保存一个自定义的多键值字符串,其中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。
Cookie的缺陷
1.信息量小、不安全
还不能存储过多信息,机密信息不能存(不要把不希望用户看到的或者不能被用户篡改的信息放到Cookie)。
2.可能被清楚
Cookie:是可以被清除,不能把不能丢的数据存到Cookie中,也许没到Expires就已经过期了。
3.不能跨浏览器
Cookie无法跨不同的浏览器;浏览器的“隐私模式/小号模式”。
本文的姊妹篇Session
Cookie详解、ASP.NET核心知识(7)的更多相关文章
- Session详解、ASP.NET核心知识(8)
介绍一下Session 1.作用 Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session). 在本篇博文的姊妹篇 ...
- ASP.NET 操作Cookie详解 增加,修改,删除
ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...
- cookie详解(含vue-cookie)
今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://mp.weixin.qq.com/s/NXrH7R8y2Dqxs9Ekm0u33w 原文如下,记录到此供以 ...
- [转]Cookie详解
从事 Web 开发已有近17个月:在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感-差不多是了解一二,然而又非真切的明晰:这就使得再用的时候,总要去再搜索一番:如此颇为难受,倒不 ...
- 详解ASP.NET MVC 控制器
1 概述 在阅读本篇博文时,建议结合上篇博文:详解ASP.NET MVC 路由 一起阅读,效果可能会更好些. Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务端的 ...
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...
- Java web Cookie详解(持久化+原理详解+共享问题+设置中文+发送多个Cookie)
Java web Cookie详解 啥是cookie? 查询有道词典得: web和饼干有啥关系? 这个谜底等等来为大家揭晓 会话技术 web中的会话技术类似于生活中两个人聊天,不过web中的会话指的是 ...
- session及cookie详解(七)
前言 文章说明 在每整理一个技术点的时候,都要清楚,为什么去记录它.是为了工作上项目的需要?还是为了搭建技术基石,为学习更高深的技术做铺垫? 让每一篇文章都不是泛泛而谈,复制粘贴,都有它对自己技术提升 ...
- cookie详解
一.cookie详解 (1)设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="userId ...
随机推荐
- [转]让opencv输出人脸检测的得分(置信率)
转自:http://www.cnblogs.com/sciencefans/ 作者:sciencefans 最近项目略多,其中一个需要找出一些和脸比较像但是不是脸的负样本,想用opencv的人脸检测器 ...
- [转帖]“剖开” LinuxONE 和 Exadata,架构专家解读里面到底有什么
“剖开” LinuxONE 和 Exadata,架构专家解读里面到底有什么 http://server.zhiding.cn/server/2018/0914/3111044.shtml 说起I ...
- python自动化之连接数据库
# -*- coding: utf-8 -*- """ Created on Fri Mar 20 10:50:56 2015 @author: sl "&qu ...
- 关于PHP 时区错误的问题
php的ini文件中时区配置默认为关闭状态 这会导致调用时间函数时出错,所以要开启时区并且配置自己的时区: 查询手册找到所有的时区有: 所以修改配置为: 重启apache问题解决
- easyui的datebox只显示年月
要求点击easyui的datebox时只显示年月,隐藏日,之前百度了好多,发现有的好麻烦,有的使用没效果,也许自己没理解,改不了.最后老员工帮我搞定了,添加一个fomatter和一个parser函数就 ...
- 【算法复习】codevs1022 匈牙利算法
题目描述 Description 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积. ...
- Kerberos无约束委派的攻击和防御
0x00 前言简介 当Active Directory首次与Windows 2000 Server一起发布时,Microsoft就提供了一种简单的机制来支持用户通过Kerberos对Web服务器进行身 ...
- JAVA代码保护从入门到放弃
java语言开发的产品,需要部署到客户现场服务器.产生了对代码进行保护的需求,开始研究代码加密方式. 经过研究分析后有两种思路,混淆和加密.两者各自适应不同的情况. 由于大量spring注解功能,并且 ...
- [学习笔记]平衡树(Splay)——旋转的灵魂舞蹈家
1.简介 首先要知道什么是二叉查找树. 这是一棵二叉树,每个节点最多有一个左儿子,一个右儿子. 它能支持查找功能. 具体来说,每个儿子有一个权值,保证一个节点的左儿子权值小于这个节点,右儿子权值大于这 ...
- python之旅:面向对象之继承与派生
一 初识继承 编写类时,并非总要从空白开始.如果你要编写的类正好是另一个现成类的特殊版本,可使用继承来减少代码冗余,子类会“遗传”父类的属性,从而解决代码重用问题 什么是继承 继承是一种创建新类的方式 ...
Http协议不会记得上次和网页“发生了什么"。服务器不记的上次给了浏览器什么,否则服务器的压力会太大。每次请求到达asp.net,都创建一个HttpHandler的新对象来处理。

