由 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 条回复
pinews
2018-10-20 11:43:35 +08:00
@HeiXiaoBai 基本上这个意思,但怕有人误解,是因为你这个人存在,你是唯一的,才产生唯一标识符,你不是像犯人一样给你一个编号你才存在,这个唯一标识符和相应的网站 ID 都只有你才能控制,就像域名一样。
iwtbauh
2018-10-20 11:48:53 +08:00
@pinews

我一直没和你讨论无状态的问题,我主要给你指出了你的以下几点错误:
1. 加密服务从来都没有被带进过 HTTP
已经从这一点引发的
2. 为什么 HTTPS 没有改变 HTTP,为什么需要把 TLS 单独出来而不是塞进 HTTP 里面
3. DNS 与 TCP/IP 应用程序的关系

无状态的原因其他人解释的很详细了,例如性能问题
pinews
2018-10-20 11:49:22 +08:00
@HeiXiaoBai 域名和邮箱邮件还是由服务器控制呢,你说你怎么掌控,当然是协议,任何联系方式都不存在服务器上,都必须服务器发送请求你的系统,由你的系统发出。
HeiXiaoBai
2018-10-20 11:54:35 +08:00
@pinews # 63
嗯,我赞同楼上大家的意见,楼主确实需要多看书
imn1
2018-10-20 11:57:05 +08:00
@pinews #56
我娘生我的时候,也没身份证这东西,看来我们革命先烈也比不上你,建国时就该想到身份证这东西

协议跟真假有什么关系?协议不管劫持啊
协议跟丢数据有什么关系?协议不管网线质量啊

其实你说到点子上了,传输协议就管传输,管什么认证呢?
http 是传输协议,不是认证协议,不能把传输和认证一体化

更重要一点是,人类社会是需求推动的,发明创造不会先于需求诞生
基于上一点,更深一步说,市场是适应广泛需求,并非单一个体的需求就能改变市场
有些发明创造,先于市场出现数十年,是因为没有广泛需求,而不是没人想到

你原帖所说的各种认证、密码保存,是产生在互联网个人服务上的,早期没有这些服务就无需认证
我可以告诉你,早在 google 前十多二十年就有密码保存工具,为何你现在才知道,因为那时没这个广泛需求
你是否觉得,地球上出现枪支的时候,就应该同时有个人枪械登记制度?

不能从现状反推起源的合理性,这是本末倒置
JamesMackerel
2018-10-20 11:58:56 +08:00
第一次见到计算机民科,开眼受教了。
imn1
2018-10-20 12:10:28 +08:00
没用过 贺氏(现在连输入法都没这个词了) 14.4 的人,是不会理解网页放一张小图片就要流量警告的,更别提带上 cookie,4KB 的 cookies 要 30 秒才能传完呢,就这情况,还是 HTTP 协议诞生好多年后的状况呢
MinQ
2018-10-20 12:29:28 +08:00
@pinews 在美国驾照是可以当身份证用的,上面有照片姓名年龄之类的信息,如果没有驾照需要申请成人身份证。而社会安全卡上的社保账号更接近于国内的身份证号,每个人一生只能有一个号码,社会安全卡在银行开户,缴税等地方需要用到
noaccounthere
2018-10-20 12:44:11 +08:00
靠自己控制...厉害厉害, 用户名重复问题谁来解决? 给每个人分配一个 uuid? 哪个组织来分配?这不还是被控制了嘛
pinews
2018-10-20 13:16:48 +08:00
@imn1 感谢,一语惊醒梦中人,被某些人带偏的我终于被你带回来了,因为 HTTP 是无状态的,后来才把 COOKIE 赛了进去验证,这才是把传输和验证搞混了,这才是把简单的东西搞复杂了,如果 HTTP 本身就是有状态的,根本没这么多麻烦事。

@MinQ
用身份证打比喻是我巨大的失误,以至于后来出现各种 bug,我的本意是你在现实中是唯一存在的,其实不需要驾照,社保号,甚至身份证号的,你去小饭馆吃饭,也不用出示什么证件,也不用办理会员,因为你的存在本身证明了你,但是在网络上,我们全成了隐身人,上网站就需要注册会员,一些网站用你注册过的 email,qq,支付宝账号来证明你的存在就像你在现实中用驾照,社保号,身份证号来证明自己一样,除此之外你没法证明自己。换言之,网络里本来应该有一个东西代表你就是现实生活中的你一样,不止 HTTP,任何需要账号密码的地方都可以用这个东西代表你就是你,这个和网络实名或者身份证号不一样,他是用来代表真的就是你,你完全掌握这个东西,不再需要别人签发编号给你。互联网所有东西都应该通过这个代表你的东西连接,任何连个东西连接都要经过你的同意,而不是你在网站里填写了电话,他就能打你电话,填写了 email,他就给你发送 email,email,电话,qq,支付宝,微博,都有代表你的东西连接,而不是他们直接连接。

@noaccounthere 就像和域名。
clino
2018-10-20 13:25:06 +08:00
感觉楼主是对软件分层不理解,按楼主的想法,把带状态的 http 协议直接塞到新版 TCP 协议里岂不是更方便?为什么不在 TCP 里直接考虑到这些需求并直接支持而是要多这么些个上层协议呢?
pinews
2018-10-20 13:30:40 +08:00
@clino 有些话我还没说,不过你可以像域名系统,你上网还是输入 ip 地址上网吗? ipv4 40 多亿 ip,如果多一点,一个人就好多 ip,还真可以把一个常用 ip 当成自己。
clino
2018-10-20 14:05:14 +08:00
@pinews 没理解你想说什么
laike9m
2018-10-20 14:11:52 +08:00
你那个统一密码的设计,如果是强制的,会很可怕
youxiachai
2018-10-20 14:23:13 +08:00
老实说...http 协议本身为啥要管验证....
而且..lz 明显也是搞混了..https..也算不上带认证了啊.....
你的所有逻辑其实都是处于业务层....
你做的你业务..为啥要在协议层就行修改呢?
无论是 cookie 还是 session 都是一些业务逻辑的不错...跟协议本身本来就不应该挂钩

老实说,,你应该专注的是业务逻辑...不要吧 http 引入进来....
youxiachai
2018-10-20 14:25:47 +08:00
至于,lz 你的想法....早就有公司在做了..例如 Okta 了解一下...
本质上.lz 想说的是 IAM 服务系统吧...
HeiXiaoBai
2018-10-20 14:28:49 +08:00
@pinews 正是现在互联网上我们每个人都是隐身人,我们才能在一定程度上保留自己的隐私,而不是即使你无痕访问,服务器还是一瞬间就知道了你是谁,知道了你访问过他
pinews
2018-10-20 14:59:32 +08:00
@youxiachai http 协议本身为啥要管验证,是不应该要啊,但是现实就是大家在用 Cookie 来做验证啊,Cookie 正是 HTT 的一部分啊,你说验证属于业务层,现状当然是这样,但本来验证应该和传输是平行的关系的,由 HTTP 支持平行的验证协议。所有网站由统一的验证管理,不应该在 HTTP 之下用 Cookie 做业务逻辑,也不应该每个网站做一个业务逻辑。

@laike9m
@youxiachai
@HeiXiaoBai 不是,现在是网站统一管理用户,你们也是这样想,我的意思是由个人来管理所有网站,主动权全在个人手里,而不是网站啊,就像 1password 来管理其他网站密码一样,当然了这是个比喻,因为 1password 是在现有的模式下运行的,而我是将其提高与 http 平行的协议层面来说的,就像域名系统一样。

我之前的观点被一些人带偏了啊,请看我上面最新的总结。
pinews
2018-10-20 15:17:02 +08:00
@t6attack 这么老的图也有,暴露年龄了啊
lscho
2018-10-20 16:03:25 +08:00
看来楼主基础知识甚为缺乏。。。http 是基于 tcp 的,也就是说设计之初是可以有状态的,但是对于 http 的应用场景来说,有状态的设计几乎没有优点,缺点一大堆。正是因为这样,才设计为无状态。。。。可以思考一下,现在的 web 应用,除了登录状态需要保持,其他的哪里需要?为了这个可以随手就解决的问题(cookie),去修改协议,真的有必要吗?

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

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

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

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

© 2021 V2EX