精易论坛

标题: [RFC 6265] 浅谈Cookie:真正意义上的Cookie合并更新 [打印本页]

作者: 镇坛道德标杆    时间: 2017-7-4 15:07
标题: [RFC 6265] 浅谈Cookie:真正意义上的Cookie合并更新
本帖最后由 junkboy 于 2017-7-4 22:42 编辑

[RFC 6265] 浅谈Cookie:真正意义上的Cookie合并更新


        大家想必对 网页_Cookie合并更新 这条命令相当熟悉,但实际上这是条不严谨的命令。HTTP请求时,Cookie是有域、路径以及其它一些参数的区别的。如果你经验足够多,你就知道在一些跨域请求或者一个网站的不同域下有相同的Cookie键的时候,或者网站严格检测跨域请求的时候,就需要自己额外写不少代码来管理Cookie,并且在Cookie的存储和导入上面就有不方便的地方。
        有些人可能想问有哪些网站是这样的,我举个例子,钱宝,初学者可以自己去实现一下不同域的功能,你会发现你需要不停地更新每个域的Cookie,除非你全部存储下来,凭添很多代码。
        本文以及代码就是针对这些情况,尝试实现自动化Cookie管理方案,像真正的浏览器一样去管理Cookie(当然,浏览器用的是文件)。

        先老规矩,提供最新的权威文档,大家一起看一下Cookie的详细定义以及各个参数的意义。
                文档标题:[RFC 6265] HTTP State Management Mechanism
                文档链接:https://tools.ietf.org/html/rfc6265
                重要部分:https://tools.ietf.org/html/rfc6265#page-17

一、定义
        Cookie是服务器给浏览器的一段数据,作用有识别用户身份和记录历史,咱们平时的需求自然就是前者。

二、Set-Cookie
        结合例子来一一介绍
                Set-Cookie: Session=xxxx; Expires=Wed, 04-Jul-18 04:13:38 GMT; domain=.test.com; path=/folder1/; Max-Age=9999; HttpOnly; Secure

                Cookie-Name:Cookie的名字
                        就是例子中的 Session 。
                        那么这儿有一个疑问:是否大小写敏感呢?
                        答案是看情况,asp中大小写不敏感,js中大小写敏感。
                        所以为了兼容,只需要保持大小写敏感即可。
                Cookie-Value:Cookie的值
                        就是例子中的 xxxx 。
                        有一些特例,例如
                                当值为 deleted (大小写不敏感)时,删除这个Cookie。
                                同样,当值为空时,我们也可以删除这个Cookie。
                Expires:过期时间,大小写不敏感
                        这是所谓的GMT时间,也是网络上最常见的时间格式,windows也提供了很多个API供转换。
                        目前的方案中没有考虑这个,也可以继续完善来考虑它,不过我个人觉得没什么意义。
                Max-Age:最大寿命,大小写不敏感
                        单位是秒,优先级比Expires高。
                HttpOnly:大小写不敏感
                        js无法获取到
                Secure:大小写不敏感
                        只允许https://的请求获取这个Cookie,http://就无法获取到。
                domain:域,大小写不敏感
                        经常会看见域用.开始,这儿要注意,新规范里注明了,这个.已经没有意义,直接删除即可。
                path:路径,大小写不敏感
                        路径

三、Get-Cookie:
        首先一个请求的链接,以 WinHttpCrackUrl 为例,解析出了我们需要的:
                Scheme:也就是 http:// 还是 https://
                Host:域
                UrlPath:目录,但是和Path有一定区别,参考代码中的_Path_Format方法
        Host和Path决定了取哪些路径的Cookie,Scheme则决定了取这些Cookie中的哪些Cookie。
        
四、设计
        同样源自群里的吹比,第一个版本尝试用哈希表,但是结构很难设计,在dalao的建议下又改用Json。
        
                Cookie在内存中的结构图:
                                                                        


        设计管理方案,自然躲不过增删改查。
                增和改,也就是代码中的Add方法,遵循的规则如下:
                        如果路径不是根路径的话,则先增或改本域的本路径,并且删除本域的所有子路径的该Cookie;
                        如果路径是根路径的话,则先增或改本域的本路径,并且删除本域的所有子路径的该Cookie,并且删除所有本域的子域的根路径的本Cookie。
                删:也就是代码中的Del方法,遵循如下规则:
                        如果指定了cookie的Name,则只删除对应路径下的该Cookie;
                        如果Path为空,则删除指定的域以及该域的所有子域;
                        如果CookieName为空,则删除该路径以及该域的所有子路径。
                查:也就是代码中的Get方法
                        由于设计好了Add和Del的规则,Get就变得相对简单了。
        
五、示范
        代码演示了qq.com的不同域的Cookie管理,Json代码来自zyJson,简单整合了一个winhttp请求的类,部分代码copy自鱼刺(和鱼刺本人的讨论也受益匪浅,感谢),也有一些自己的特点:
                1、Cookie管理全部托管给自制的Cookie类;
                2、Header管理全部交给HashMap;
        这样就不再频繁调用WinHttpAddRequestHeaders,而是在WinHttpSendRequest处统一发送。
        
六、不足
        首先是效率,效率肯定是比不上数组循环替换的,但是这个牺牲我个人还是可以接受的,看各位对于跨域请求Cookie管理的需求了。
        其次是兼容上,HTTP协yi我觉得是个很灵活的协yi,允许很多自定义的东西,RFC 6265上对于Cookie的规定和讲解也是相当笼统,让人很困惑。怎么说呢?我觉得不同语言不同库可能都有自己的一套处理习惯,造成了大体一致但在一些细节方面比较混乱。
        
        在下抛个砖,只是个雏形,更多在于交流和分享自己的学习思路,未来会继续学习完善,如有谬误,还望指正。
        也希望有能力的朋友继续优化或者自己实现个Cookie管理的方案。
        下面是代码以及文档,代码中注释还是很清晰的,谢谢阅读。






作者: 阿杰大大    时间: 2017-7-4 15:13
回帖看大神。

作者: EExiaolin    时间: 2017-7-4 15:17
看看是怎么写的

作者: 冯古屋    时间: 2017-7-4 15:26
我感觉又是精华,
作者: wmv520    时间: 2017-7-4 15:33
看看是怎么写的
作者: wmv520    时间: 2017-7-4 15:33
看看是怎么写的。。。
作者: wangguan    时间: 2017-7-4 15:35
谢谢!学习知识。
作者: w648505183    时间: 2017-7-4 15:47
谢谢分享学习了

作者: 衰而不爱    时间: 2017-7-4 15:49
大神,牛逼牛逼啊。。。屌屌屌屌
作者: 風情揚    时间: 2017-7-4 15:56
看看玩的。
作者: y2j423633    时间: 2017-7-4 16:08
希望有能力的朋友继续优化或者自己实现个Cookie管理的方案
作者: kat    时间: 2017-7-4 16:09
有 2 个未使用的图片   [url=]查看[/url]|[url=]使用[/url]|[url=]删除[/url]

作者: w1nfire    时间: 2017-7-4 16:14
如果您要查看本帖隐藏内容请回复
作者: 猥琐小胖子    时间: 2017-7-4 16:15
HttpOnly:大小写不敏感
                        只允许HTTP使用,这儿的HTTP应当是HTTP协yi,而不是HTTP和HTTPS的区分。

HttpOnly不是这个意思,这边你描述错了。你再看下。
作者: 小牛大大    时间: 2017-7-4 16:16
get新技能了

作者: 神梦无痕    时间: 2017-7-4 16:18
新技能已get√
作者: 镇坛道德标杆    时间: 2017-7-4 16:19
猥琐小胖子 发表于 2017-7-4 16:15
HttpOnly:大小写不敏感
                        只允许HTTP使用,这儿的HTTP应当是HTTP协yi,而不是HTTP ...

嗯   这个参数一般不影响post程序   我就没有去理解它
作者: Kalen    时间: 2017-7-4 16:32
新技能已get√
作者: 118184017    时间: 2017-7-4 16:38
新技能已get√
作者: qiuyingjia    时间: 2017-7-4 16:42
可以的,支持
作者: 嗨嗨嗨    时间: 2017-7-4 17:20
不错,支持下                                                

作者: happyweeks365    时间: 2017-7-4 17:30
虽然不用,但还是支持了!!
作者: onefish    时间: 2017-7-4 19:33
#在这里快速回复#新技能已get√
作者: 陈大奶么么哒    时间: 2017-7-4 19:42
非常好的文章!顶!
作者: chendipang    时间: 2017-7-4 20:38
新技能已get√
作者: 黑鱼也疯狂    时间: 2017-7-4 21:47
而我问题儿童问题为问题肉丸汤万人跳舞
作者: callng    时间: 2017-7-4 21:54
6666666666666666666666666666666
作者: 2995455338    时间: 2017-7-4 22:37
不错,支持下           


作者: ck66    时间: 2017-7-4 22:44
可以学习一下  方便以后POST
作者: 小明无敌    时间: 2017-7-4 22:50
我来瞅瞅         

作者: 代码之殇    时间: 2017-7-4 23:13
谢谢分享。。。
作者: 靓女伈    时间: 2017-7-4 23:48
我只是默默地求源码而来

作者: play4820    时间: 2017-7-5 01:29
&&^^^^&&^^^^

作者: 529512527    时间: 2017-7-5 02:24
支持一下谢谢
作者: 登峰望岳    时间: 2017-7-5 02:58
新技能已get√
作者: 拯救    时间: 2017-7-5 03:34
不错,感谢分享

作者: xslyhk    时间: 2017-7-5 05:24
谢谢分享哦
作者: xp我滴耐    时间: 2017-7-5 08:32
看看学习下

作者: huaidan2015    时间: 2017-7-5 08:54
WinHttpSendRequest
作者: Patek    时间: 2017-7-5 09:05
look look ..
作者: adoniskinger    时间: 2017-7-5 09:26
看得一脸蒙B
作者: golijiang    时间: 2017-7-5 09:28
学习,感谢分享
作者: 帝释天2017    时间: 2017-7-5 10:35
看看源码怎么样
作者: zhougan    时间: 2017-7-5 10:37
66666666666666喜欢
作者: phinex    时间: 2017-7-5 11:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: 唯梦    时间: 2017-7-5 11:56
不错 谢谢分享
作者: zdl158    时间: 2017-7-5 15:33
精品,先收藏一下
作者: 网络注册会员    时间: 2017-7-5 16:20
我顶我顶一下我顶

作者: rzglei    时间: 2017-7-5 16:57
        新技能已get√
作者: 织梦    时间: 2017-7-5 17:59
新技能已get√
作者: xinyuxinyuan    时间: 2017-7-5 18:55
学习学习,
作者: zhuogui007    时间: 2017-7-5 19:04
新技能已get√

作者: 别了所谓的曾经    时间: 2017-7-5 19:58
看看 学习学习
作者: q84875298    时间: 2017-7-5 20:03
感谢发布原创作品,精易因你更精彩!

作者: 十万个为什么    时间: 2017-7-5 20:45
支持 不错。
作者: szwwltl    时间: 2017-7-5 21:06
RE: [RFC 6265] 浅谈Cookie:真正意义上的Cookie合并更新 [[url=]修改[/url]]









作者: stuhk    时间: 2017-7-5 21:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪山凌狐    时间: 2017-7-5 22:26
来学习一下,感谢分享~

作者: 晴雯晴雯    时间: 2017-7-6 08:20
来学习一下
作者: 无限软件    时间: 2017-7-6 08:33
难得看到详细的解释,虽然没什么帮助(php设置cookie应该是比较常见,家常便饭了),也支持一下
作者: cpu001071    时间: 2017-7-6 13:17
学习学习一下
作者: ╰☆凡尘ゆ    时间: 2017-7-6 13:57
感谢发布原创作品,精易因你更精彩!
作者: 啊顺    时间: 2017-7-6 16:22
来学习,谢谢分享

作者: [久居深海孤独为    时间: 2017-7-6 21:08
只能说,你有点牛逼

作者: ddffbb    时间: 2017-7-6 21:13
看起来有点意思

作者: 哒咩    时间: 2017-7-6 22:44
感谢分享,很给力!~
作者: Mr.Yang    时间: 2017-7-6 23:21

作者: 渡不得……    时间: 2017-7-7 00:42
感谢分享新技能
作者: feng666    时间: 2017-7-7 02:16
厉害了,膜拜一下

作者: heiyi    时间: 2017-7-7 02:48
支持开源~!感谢分享
作者: 亦倾城    时间: 2017-7-7 03:05
感谢发布原创作品,精易因你更精彩!
作者: 无锡呵呵    时间: 2017-7-7 04:00
666666666666666666666
作者: InstallTest    时间: 2017-7-7 09:02
真正意义上的Cookie合并更新
作者: wanzhenghe999    时间: 2017-7-7 09:07
不错,楼主给力

作者: 隔世經年    时间: 2017-7-7 09:13
感谢分享!已GET
作者: 王国444    时间: 2017-7-7 09:35
想看更多,看看看啊看看
作者: 月光刀影    时间: 2017-7-7 10:30
看看大神作品.................
作者: 95First    时间: 2017-7-7 11:30
感谢分享,很给力!~
作者: applek    时间: 2017-7-7 12:47
我带走了
作者: 梵笙    时间: 2017-7-7 13:28
看看               
作者: Svlik    时间: 2017-7-7 17:57
支持下,确实是好东西。

作者: 熊猫巴布    时间: 2017-7-7 18:07
这个不错,厉害了

作者: 13600798154    时间: 2017-7-7 18:11
看看看            

作者: qq2278322    时间: 2017-7-7 18:15
我来支持下了


作者: 六升臣    时间: 2017-7-7 18:20
感谢分享,鄙视喷子,

作者: aa315324324    时间: 2017-7-7 18:31
支持支持LZ
作者: 银河世纪    时间: 2017-7-7 19:03
先看下是不是源码

作者: 互撸娃666    时间: 2017-7-7 19:37
牛逼了 大神
作者: just1993    时间: 2017-7-7 19:46
cewwwdwdwwdwwd
作者: 城南花已开    时间: 2017-7-7 19:49
看看大佬的操作!

作者: fab861122    时间: 2017-7-7 21:43
谢谢分享!
作者: 风中冰雨    时间: 2017-7-7 21:53
不错,学习了

作者: sunj781    时间: 2017-7-7 21:59
谢谢分享。
作者: 乱世小熊    时间: 2017-7-7 22:41
我来看下!!
作者: qwe282264202    时间: 2017-7-8 00:04
很有价值,谢谢楼主

作者: wajylt001    时间: 2017-7-8 01:55
看看是不是有用,看着还不错

作者: jiaqq02    时间: 2017-7-8 01:57
感谢分享  

作者: 瘦瘦的小四    时间: 2017-7-8 10:11
下载回来看看,很牛逼啊

作者: futiem    时间: 2017-7-8 11:02
下载回来看看,很牛逼啊
作者: InstallTest    时间: 2017-7-8 11:23
真正意义上的Cookie合并更新




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4