关于Cookie和Session的理解

写在前面

在开始之前,先要理解会话(Session)的含义。Session跟踪是web中常用的技术,用来跟踪用户整个会话。Cookie和Session是常用的绘画跟踪技术。

Cookie是通过客户端记录确定用户身份,而Session通过在服务器端记录信息确定用户身份

1 Cookie机制

理论上,一个用户的所有请求操作都应该属于同一个会话,另一个用户的请求属于其他的一个会话。

Web应用程序是使用HTTP协议传输协议(可恶我计算机网络没学好啊=皿=)。HTTP协议是无状态、无连接协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。所以Cookie设计是为了来实现Cookie跟踪会话。

1.1 什么是Cookie

简而言之,Cookie是一小段文本信息,作为一个通行证。客户端请求服务器,如果服务器需要记录该用户状态,就response一个Cookie给浏览器,客户端浏览器就会保存Cookie作为一个通行证,服务器端依靠这个通行证确认访问者用户身份。

而当浏览器再次请求该网站时,浏览器吧请求的网址连同Cookie一同提交给服务器,服务器再次检查Cookie用来辨别用户状态。服务器还可以根据需要修改Cookie内容。

1.2 Javascript操作Cookie

(……)

1.3 Cookie的不可跨域名性

这一点很好理解,不同的网站向客户端颁发不通的Cookie,A网站和B网站向客户端颁发的Cookie相互不可以修改。一个网站只操作这个网站的Cookie,从而保证用户的隐私安全。

1.4 Unicode编码:保存中文

中文属于Unicode字符,在内存中占4个字符,英文属于ASCII字符,在内存中占两个字节。Cookie使用Unicode字符时候需要对Unicode编码,否则会乱码。

1.5 设置Cookie的所有属性

除了name和value两个一般都会有的属性以外,Cookie还有几个其他常用属性。每个属性对应一个getter方法与一个setter方法。举几个例子:

String name: Cookie的名称,Cookie一旦创建,名称便不可更改;

Object value: Cookie的值,看情况是否需要编码;

int maxAge: Cookie的生存时间,单位为秒,maxAge之后该Cookie失效,如果为负数,则代表该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会保存该Cookie,如果为0,表示删除Cookie,默认值为-1;

boolean secure: 是否使用安全协议传输,比如HTTPS,SSL,默认值为false;

String path: 该Cookie使用的路径;

String domain: 可以访问该Cookie的域名;

int version: 版本号

1.6 Cookie的修改、删除

Cookie不可修改,如果要修改,只能够新建一个同名Cookie添加到response中覆盖原来的Cookie,若要实现删除,则将气maxAge设置为0。

1.7 Cookie的安全性

HTTP协议是无状态、无连接的,而Cookie是服务器端创建的,所以生成一个可信Cookie的关键在于客户端无法伪造出Cookie,我们采取的手段是单向函数。比如计算md5就是一个单向函数,假设写好了一个函数md5(String),我们可以通过这个函数得到结果,但是反推输入却很困难。

生成一个可信的Cookie的方法可以是"用户名:口令(md5值)"作为一个字符串构成一个Cookie发送给客户端。服务器验证的时候将其拆分成“用户名”和“口令(md5值)”在数据库中找到该用户的记录,并继续找到原口令。服务器端根据数据库中存储的口令计算其md5值,并和客户端Cookie的md5值进行比对,若一致,则Cookie有效。

目前根据md5值进行加密只是我作为一个初学者的简单思考,而且在这种方式中,用户的用户名是被暴露的,如果用户使用email作为用户名,那么其email就可以被泄露。

2 Session机制

啊啊啊啊啊头大了……

2.1 什么是Session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,Session保存在服务器上。客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上。它和Cookie的差别,举个例子:

A国元首举行一个宴会,到场的人需要进行一个身份验证。Cookie相当于给客人发请帖,根据请帖入场,Session则是相当于等客人到场时查证宴请宾客名单入场。

2.2 Session的生命周期

Session保存在服务器端,为了获取更高的存取速度服务器一般把Session放在内存中,若Session内容太复杂,可能会引起很多问题比如内存溢出等。

Session在用户第一次访问服务器时自动创建,生成后只要用户继续访问,服务器就会更新Session最后访问时间,认为该用户活跃(active)了一次;

若用户长时间没有活跃,超过一个确定的时间,则会被从内存中删除。

2.3 Session对浏览器的要求

虽然Session保存在服务器内,对客户端是透明的,它的正常运行仍然需要客户端浏览器的智齿。这是因为Session需要使用Cookie作为识别标识。HTTP协议是无状态无连接的(不知道多少次重复这个原因了=。=)Session无法根据HTTP来判断是否为同一客户。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容