Scripts 学盟
标题:
session 与 cookie 机制——混混之精辟解读版
[打印本页]
作者:
momo
时间:
2011-3-30 14:01:08
标题:
session 与 cookie 机制——混混之精辟解读版
/mg浴火凤凰(307053741) 11:03:21
一般饿Web页面登陆一次就把信息写入Cookie,打开另一个网页的时候显示的用户名是从Cookie读的吧?
混混@普宁.中国<
alvin@iscripts.org
> 11:03:57
这个由网站程序员控制
混混@普宁.中国<
alvin@iscripts.org
> 11:04:11
它喜欢这么做 就这么做
/mg浴火凤凰(307053741) 11:04:34
是不是每次提交的时候都需要吧用户名再次提交给服务器啊?
混混@普宁.中国<
alvin@iscripts.org
> 11:05:08
登录一般记录在 session 中
混混@普宁.中国<
alvin@iscripts.org
> 11:05:22
所以,你不用每次提交用户名和密码
混混@普宁.中国<
alvin@iscripts.org
> 11:05:50
如果,有个网站程序员,他不在 session 中记录,也不在 cookie 中记录
混混@普宁.中国<
alvin@iscripts.org
> 11:05:58
那没办法,你得每次提交
混混@普宁.中国<
alvin@iscripts.org
> 11:06:16
不过,想是没有人这么傻
/mg浴火凤凰(307053741) 11:07:15
那服务器怎么知道当前用户还在登陆状态?
混混@普宁.中国<
alvin@iscripts.org
> 11:07:35
这里要从 session 说起
丫丫@合肥.安徽(1433995154) 11:07:46
.net里有其他的东西可以记录,也不一定是session和cookie。不过怎么都是要记在一个地方的,不然没法判断
/mg浴火凤凰(307053741) 11:08:43
我的意思就是在我新打开i一个网页的时候,它怎么知道我已经登陆过没有?
混混@普宁.中国<
alvin@iscripts.org
> 11:09:03
还是先说 cookie 吧
混混@普宁.中国<
alvin@iscripts.org
> 11:09:21
假设,我是一台服务器
/mg浴火凤凰(307053741) 11:09:28
我知道session和cookie是哈
/mg浴火凤凰(307053741) 11:09:36
我知道session和cookie是啥
混混@普宁.中国<
alvin@iscripts.org
> 11:09:36
你,摸摸,宝宝,都是浏览器
/mg浴火凤凰(307053741) 11:09:45
好的
芬芬(517774249) 11:09:50
java和。net 的session cookie 都一样吗?
混混@普宁.中国<
alvin@iscripts.org
> 11:10:08
你们偶尔会来我家拜访一下
混混@普宁.中国<
alvin@iscripts.org
> 11:10:56
你们每次来我家的时候, 身上都带有一个口袋, 这个口袋 就叫 cookie
混混@普宁.中国<
alvin@iscripts.org
> 11:11:23
你们来的时候, 我可以放点东西在你们口袋里头
混混@普宁.中国<
alvin@iscripts.org
> 11:11:50
并且要求,下次再来我家的时候必须带回来,我要检查
混混@普宁.中国<
alvin@iscripts.org
> 11:12:33
这就是 cookie 存储了
混混@普宁.中国<
alvin@iscripts.org
> 11:13:04
cookie 存储,要注意的问题
混混@普宁.中国<
alvin@iscripts.org
> 11:13:42
1, 东西是放在你们口袋里, 要设定一个过期时间
混混@普宁.中国<
alvin@iscripts.org
> 11:14:01
隔多久之后,你们再来我家,就不用带了。
混混@普宁.中国<
alvin@iscripts.org
> 11:14:44
如果,没有设定,浏览器会默认在会关闭所有会话窗口后,就失效
混混@普宁.中国<
alvin@iscripts.org
> 11:15:33
2. 你们的口袋都不是很大, 我不能放太多的东西
混混@普宁.中国<
alvin@iscripts.org
> 11:16:59
3. 安全性问题! 东西放在你们口袋里
虽然原则上我可以要求你们不要动里边的东西
但是你们回家后,就一定要动,我也没有办法
混混@普宁.中国<
alvin@iscripts.org
> 11:17:28
如果,我放了100块在凤凤口袋里,你下次来,说没有啊。。混混你上次只放了1块钱
,
混混@普宁.中国<
alvin@iscripts.org
> 11:17:37
或者干脆说,根本没放
混混@普宁.中国<
alvin@iscripts.org
> 11:17:42
那我亏大了
混混@普宁.中国<
alvin@iscripts.org
> 11:18:38
好了,。。。 session 了
混混@普宁.中国<
alvin@iscripts.org
> 11:19:37
因为,有些浏览器老是故意要动 口袋里的东东, 像凤凤
混混@普宁.中国<
alvin@iscripts.org
> 11:20:02
有些老是要不小心弄丢 口袋里的东东, 像摸摸
混混@普宁.中国<
alvin@iscripts.org
> 11:20:31
所以,混混又想了一个办法
混混@普宁.中国<
alvin@iscripts.org
> 11:20:38
叫 session
混混@普宁.中国<
alvin@iscripts.org
> 11:21:18
你们来我家 串门的时候, 我不放东西在你们口袋里了
混混@普宁.中国<
alvin@iscripts.org
> 11:21:45
我把东西 放在自个家里,
混混@普宁.中国<
alvin@iscripts.org
> 11:21:58
然后分别给编上 号码
混混@普宁.中国<
alvin@iscripts.org
> 11:22:03
叫 session Id
混混@普宁.中国<
alvin@iscripts.org
> 11:22:43
然后, 用一个小纸条写上这个 session id , 放你们口袋里
混混@普宁.中国<
alvin@iscripts.org
> 11:23:35
这样子,你们回家去后,就没带走东西, 只带走了一个小纸条
混混@普宁.中国<
alvin@iscripts.org
> 11:24:27
我就安心多了。。。
混混@普宁.中国<
alvin@iscripts.org
> 11:25:19
你们下次来我家的时候,我可以根据你带回来的 session id , 从自家里找到 上次存好的东西
混混@普宁.中国<
alvin@iscripts.org
> 11:27:51
session 存储,要注意的问题
1, 理论上只要我家房子够大,就可以放更多的东西, 没有限制
但是如果访客太多,还是会挤爆内存和硬盘的,所以也注意不要给客户分配太大的东西
混混@普宁.中国<
alvin@iscripts.org
> 11:29:08
2. 给东西编号的时候,不能使用规则性 的号码
混混@普宁.中国<
alvin@iscripts.org
> 11:29:36
防止,凤凤猜到摸摸的 编号, 下次过来冒领摸摸的 东西
混混@普宁.中国<
alvin@iscripts.org
> 11:30:12
不过,这个服务器一般都实现好了,不用自己关注,session id的管理
混混@普宁.中国<
alvin@iscripts.org
> 11:31:21
3.session 也要设定一个合理的过期时间
混混@普宁.中国<
alvin@iscripts.org
> 11:31:43
像燕子,有可能拿个纸条回家后,就再也不来了
混混@普宁.中国<
alvin@iscripts.org
> 11:32:09
那如果我不定时清理 放太久又没用到的东西
混混@普宁.中国<
alvin@iscripts.org
> 11:32:23
我家也会成垃圾堆
混混@普宁.中国<
alvin@iscripts.org
> 11:33:16
想到的就这些了
混混@普宁.中国<
alvin@iscripts.org
> 11:33:39
上面就是 session 存储了
混混@普宁.中国<
alvin@iscripts.org
> 11:33:48
最后,再说一下凤凤的问题
混混@普宁.中国<
alvin@iscripts.org
> 11:34:39
“我新打开i一个网页的时候,它怎么知道我已经登陆过没有?”
混混@普宁.中国<
alvin@iscripts.org
> 11:35:44
在打开的多个浏览器窗口时,哪些窗口是建立在同一个session(会话)上的
混混@普宁.中国<
alvin@iscripts.org
> 11:37:06
session 的保持, 是由浏览器负责维护的
混混@普宁.中国<
alvin@iscripts.org
> 11:37:28
比如说, 摸摸第一次来我家, 就领到了一个纸条
混混@普宁.中国<
alvin@iscripts.org
> 11:38:01
我没有告诉他, 这个纸条要留多久
那摸摸下次要不要再带这个纸条过来呢, 这当然是摸摸决定
摸摸如果觉得今天要做的事还没做完
那摸摸就会在第二次过来的时候,再把这个纸条带过来
如果第二次回去后,觉得还有事情得来找我, 那么他第三次来我家,又会再带这个纸条过来
浏览器想保持一个会话, 它会在每次请求的时候,都把 手里头的 session id 再提交上去
浏览器如果不想保持会话,它会在再次访问时, 空着口袋去,重新领一个新的纸条
浏览器保持会话的原则:
--------------------------
1. 在原有窗口,打开同一站点页面
2. 通过点击链接,在新窗口打开同一站点页面
3. 通过提交表单,在新窗口打开同一站点页面
3. 脚本 window.open(....), 在新窗口打开同一站点页面
只要再次访问事件,由页面触发,而且访问的是同一个站点, 那么浏览器会自动的想要保持会话
没了
漠漠(1064087442) 11:54:38
你说的那个纸条,我怎么感觉我以前用的时候把纸条当口袋用了
芬芬(517774249) 11:54:38
可以不可以 用最通俗的语言看、概括概括
混混@普宁.中国<
alvin@iscripts.org
> 11:55:44
cookie 和 session 的区别就在于:
混混说要给 所有人 发一百块, 然后就真的每人发了 100 块. ( <-------- 这个是 Cookie )
混混说要给 所有人 发一百块, 然后不发, 只给你发了个存折. ( <-------- 这个是 Session )
漠漠(1064087442) 11:57:57
session("username")=ors("username")
session("password")=ors("password")
session("userclass")=ors("userclass")
漠漠(1064087442) 11:58:08
那这是存折还是钱?
混混@普宁.中国<
alvin@iscripts.org
> 11:59:01
这是发钱
用了发存折的方式,发钱
作者:
Alvin
时间:
2011-3-31 00:35:44
混混说的好不好
作者:
momo
时间:
2011-3-31 09:43:35
回复
2#
Alvin
你要是觉得不好,那我把精辟改成pijing吧!
作者:
Yisin
时间:
2011-4-3 12:28:14
混混好厉害
作者:
那个谁
时间:
2011-4-20 14:53:56
{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}{:3_51:}
作者:
俊俊
时间:
2011-7-19 16:44:41
说的不错,理解很到位,但那个给字条的比喻不太合适,或者可以比喻成告诉他们一个id
作者:
奔波儿灞
时间:
2011-7-22 09:26:58
拍手する
作者:
那个谁
时间:
2011-7-23 09:55:43
Alvin 发表于 2011-3-31 00:35
混混说的好不好
不错不错。描述也很到位。还差个application哦。
作者:
youyoubaiyun
时间:
2013-4-27 18:07:01
以前看不懂这些,现在来看受益匪浅,很受教的
欢迎光临 Scripts 学盟 (http://www.iscripts.org/)
Powered by Discuz! X2