由 cookie 与 session 引起的思考

2018-10-19 20:31:58 +08:00
 pinews
之前在搜索 cookie 相关问题的时候,不时跳出来“ cookie 与 session 有什么不同”的问答跳出来,看了几篇问答,觉得很纳闷,比如第一句就是“ HTTP 请求本是无状态的”。
那么问题来了,HTTP 为什么是无状态的,HTTP 为什么不做成有状态的,HTTP 能不能做成有状态的,有没有不是 HTTP 却是有状态的?
现在的 google chrome 开始保存密码了,还有其他保存密码的服务?早干嘛去了?
早在 HTTP 之前,域名服务就出来了,为什么没有针对个人的 ID 验证协议,还有现在把加密服务带进了 HTTP,是不是歧视?后来引进各种措施是不是亡羊补牢。

我认为所谓的无状态 HTTP 协议和 ipv4 一样,是一种先天狭隘考虑不周的表现。之所以这样想是因为(警告:下文可能引起一些人不适)

----------------------------------------------------------------------------------------------------------------------------------------
大家知道,美国是没有身份证的,英国的身份证制度也是两立两废,国家有意建立身份证制度,但一些人很愤怒,巴拉巴拉,当然了也不是只有中国有身份证,非要用“先进老外”例子的话有德国以色列比利时等。
6552 次点击
所在节点    程序员
85 条回复
clino
2018-10-20 09:40:04 +08:00
@pinews 不是麻烦,而是限制死了做法不灵活
这部分应该由具体应用来定义,这样可以比较自由地发展
vindurriel
2018-10-20 09:49:50 +08:00
这其实是互联网身份认证的话题 可是您的问题有考古学的倾向 推荐看下这个 https://solid.inrupt.com/about solid 是互联网之父 Tim Bernes Lee 背书的新产品 其中有身份认证的解决方案
Jex
2018-10-20 09:52:29 +08:00
刚学习 HTTP 的程序员有这种想法很正常,但是很多人也解释不清楚这个问题,为什么 HTTP 协议不一开始就设计成有状态 /带认证的特性?其实并不是楼主所说的「是一种先天狭隘考虑不周的表现」,恰恰相反,HTTP 协议有些功能是过度设计、考虑太多的结果! HTTP 协议本身有身份验证功能,但因为缺乏可扩展性现在几乎没有网站使用:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication


类似的,IPv6 报头也有比 IPv4 报头简单的地方,你只看到了 IPv6 多出来的特性,却没看到删减去的特性。如果你在一开始就过度设计,添加太多使用频率很低的功能,那就会使协议过于复杂,更加缺乏可扩展性,更加不能适应时代的变化。基于 Cookie 的身份验证方法可以很好地适应各种网站各种不同的需求,而且用处也不仅仅是身份认证 ,你却没有看到它的优点。你应该再看看网络洋葱结构图,理解一下「软件设计的正交性」,让你来设计一个检查用户输入是否合法的框架,你是设计成 checkInput(userInput:String,validators:[UserInput -> Bool])?让 Validator 可以是传入一个可扩展的检查函数参数?还是设计成 checkInput(userInput:String,validators:[StringValidatorName]), 让 checkInput 方法内置一堆预定义的校验方法,只允许传入指定 Validator 的名称?
iceheart
2018-10-20 09:53:10 +08:00
http 协议是干啥用的?
zcore
2018-10-20 10:19:23 +08:00
个人见解,轻喷:
1、跟身份证没有关系。
2、为什么一开始考虑不到,因为预知未来是很难的事,就好比你现在在抱怨过去的人考虑不周,给现在的人造成麻烦,那有没有考虑过你现在的所作所为,会为未来的人造成什么麻烦呢?大多数人不会考虑或考虑很少,因为未来的人不会穿越到现在,把你打一顿说:“你设计的什么玩意”!即使你刻意考虑未来需求,你也无能为力:
2.1、未来可能性非常之多,即使后来证实你预测正确,也很难说是不是运气
2.2、你必须首先考虑当下的需求,满足了当下的需求你设计的东西才不会被淘汰,如果为了预测的不知道靠不靠谱的未来需求,导致当下弊大于利,你的东西会迅速被淘汰,后面所有的预测都将会毫无意义。
2.3、即使未来证明的你考虑的是合理的,想要让人们重拾你的设计,未来的人也必须考虑重要的一点——巨大的更换成本。ipv6 比 ipv4 先进早是板上钉钉的事,为什么 ipv6 推动这么慢?其中一个原因就是,把 ipv4 换成 ipv6 的更换成本要大于更换后的短期收益,只有随着时间的流逝,ipv4 越来越不中用,导致更换的短期收益水涨船高,或者新技术使更换成本骤降,越来越多的人才会行动起来。

所以,我现在不妨假设,楼主穿越回 http 设计之初的年代,设计了有状态的 fuckhttp 协议,并声称:“未来的人一定会后悔选择无状态的 http !”但,有状态的 fuckhttp 比无状态的 http 慢,在哪个计算机性能底下的年代,用 http 的人看小黄片比用 fuckhttp 的人快了不止一星半点,fuckhttp 被无情淘汰,直到今天人们重新发现了 fuckhttp 的光辉,感慨楼主天妒英才。然而 fuckhttp 的推进依旧举步维艰,因为更换它需要重新设计基于 http 的一切上层建筑,巨大的更换成本与收益不成正比,没人厂家愿意牺牲自己让别人坐收渔利,何况 http 也有性价比更高的短期解决方案。
究竟 fuckhttp 最后能不能把 http fuck 掉?天知道!
pinews
2018-10-20 10:27:26 +08:00
@MinQ
@sagaxu
@abcbuzhiming 一个说社保,两个说驾照 听谁的?

@iwtbauh 如果无状态最合适,何必引入半吊子 cookie,保存密码当然和现在的 HTTP 没关系,但是能不能有关系?有关系了是不是更好?验证个人 ID 不需要新协议,按你的意思上网都用 IP,不要用域名系统,既然有域名系统为什么没有个人验证系统?还有我说的是 https 也是由网站短发起的,个人没有任何控制力,以上不是歧视是什么?
@wxsm 你的高见?

@lolizeppelin 革先天不足之命而已,邮件系统比万维网早多了,http2 也支持双向通讯了

@azh7138m
@zh826256645 现在才是被控制了呢,163 邮箱不绑定手机不让改密码,微信还需要 2 个好友验证,还有支付宝 googlefacebook,他们都是有自身业务的,提供账号互联不过是有机可乘。用户根本不能自主控制。
iwtbauh
2018-10-20 10:32:53 +08:00
@pinews #46

我的意思是你完全思考错方向了。因为你说的“还有现在把加密服务带进了 HTTP,是不是歧视?后来引进各种措施是不是亡羊补牢” 根本就是错误的。

加密服务从来都没有被带进过 HTTP
iwtbauh
2018-10-20 10:35:06 +08:00
@pinews #46

然后,回答你为什么不能有关系。你这样设计会使软件过度复杂化,参考 OSI 为什么被 TCP/IP 打败。“七层 OSI 还不如七层玉米卷”。一个软件做一件事。
pinews
2018-10-20 10:42:42 +08:00
@vindurriel 感谢,可惜看不懂,不知能否介绍一二
@Jex 感谢,我记得 HTT 是带验证的,你证明了我的推测,好多地方设计的也不错,为什么没人用呢,能不能改进
@zcore 不想谈哲学和假设。

就说说比 http 早的 email 协议吧,你注册账户后,就可以给别人,所有人发信息,别人,所有人也可以给你发信息,而现在的注册用户全由网站控制,网站不一样,账户无任何关联,现在的 Oauth 同样对用户是不透明的,应该由互联网上的独立的协议与 http 结合,而不是由某一些公司控制。
pinews
2018-10-20 10:46:21 +08:00
@iwtbauh 我都说了 https 了,不知道你自言自语什么,你要觉的我说的不对,可以用“逻辑”反驳,还有不要拿 TCPOSI 狐假虎威,不能说明两者的联系,相当于什么也没说。
iwtbauh
2018-10-20 10:53:59 +08:00
@pinews #60

然而 HTTPS 不是 HTTP。HTTPS 也并没有修改 HTTP 本身。使 HTTP 具有加密能力。这正是协议的优美之处所在,这鼓励代码重用,其他协议也可以基于 TLS 而不是重复发明轮子,如果你把 TLS 该做的塞进 HTTP 那才是 ugly 和 loser。我觉得你的相关课程应该重修,或者语文应该重修。

两者最根本的联系是欧盟发明 OSI 是政治上害怕来自五角大楼的 TCP/IP。然而历史证明这是愚蠢的。我举此例就是要告诉你你这样设计会使软件过度复杂化,有问题么。
imn1
2018-10-20 11:01:48 +08:00
我娘生我的时候,都不知道现在的孙子上学也要查房产证
哦,那时还没房产证这东西,应该叫「无状态生育」

以你的思想水平,应该能想到 50 年后,电饭锅能做出认证每个人不同口味的饭来,不如你现在去创造这个协议
我们的水平达不到这个境界
D3EP
2018-10-20 11:05:08 +08:00
你怕不是想搞全球上网实名制?
pinews
2018-10-20 11:08:51 +08:00
@iwtbauh ftp 也用 DNS,http 在 URL 里用域名,是改变了还是没改变?按你说的,难道说我要推出 HTTP 支持个人用户认证系统协议 就是要改变 HTTP,那确实,我要弥补他的不足。你说语文,我看你是“指马为鹿”。

你说的再高大上,复杂化不是你说了算。
iwtbauh
2018-10-20 11:12:40 +08:00
@pinews #54

你这楼就是在胡搅蛮缠了。DNS 和 FTP/HTTP 是独立的,DNS 改变 HTTP 协议了吗。任何基于 TCP/IP 的服务都可以使用 DNS。并不是把“域名解析”这个知识塞入了 HTTP 协议。

lz 基础知识问题不少,各种错误不断,我建议 lz 还是需要补充一下基础知识再来
pinews
2018-10-20 11:16:03 +08:00
@D3EP 有些相似,但有本质的不同,你不用为那么多网站疲于奔命,相反,所有网站都听你个人的。
@imn1 嘿嘿 不一样,怎么知道你这房产证是真的假的,房产证丢了怎么办,情况应该是这样的,房产证出现的时候接入身份证,学校需要房产证,接入身份证,学校需要你的房产证,向身份证请求,身份证通知你,你同意权限,学校看到了房产证。
pinews
2018-10-20 11:34:35 +08:00
@iwtbauh 回到起点,你用 http 请求 v2ex,v2ex 把内容返回给了你,为什么返回给了你,没给别人? http 真不知道谁是发起者?可是为什么做成无状态?网站不知道你是谁,所以网站强制启用了自己的会员系统,在你的电脑里留下一串串 cookie,本来你就是你,何必要网站标记,应该你留一些记录在服务器,然后还能完全掌控这一些记录,如果 http 把你当成是你还有这么多麻烦?对 HTTP 来说,强制你成了隐身人。
Jex
2018-10-20 11:35:00 +08:00
@pinews 我都解释到这份上了,你应该学会自己思考
HeiXiaoBai
2018-10-20 11:37:02 +08:00
看下来有点搞不懂楼主你想说啥……
你是想说希望 HTTP 访问时是有带上每个人的唯一标识符的么?
HeiXiaoBai
2018-10-20 11:41:05 +08:00
@pinews #57 先不提其他,请教一下。如何把我的记录"留在服务器的磁盘上",而且我还能掌控?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/499264

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX