cookie和session
session是存在服务器上的,cookie是存在浏览器上的!
我这样比喻的:
将浏览器看着一个人,一个session_id是他的身份证,cookie是他自己本人口袋的东西。
session_id产生的过程:
session 访问 --> 服务器 --> 产生session_id在服务器上 --> 服务器将产生的session_id 以cookie的方式返回给浏览器 --> 浏览器保存session_id(cookie)
session_id是唯一的,即使是同一个浏览器,在不同时间也会产生不同的session_id,加密方式有点像md5。
不同浏览器上的cookie是不相通的,所以每个浏览器的cookie都是独立的,所以不用担心不同的浏览器cookie名字重复的情况
当你要登录的时候,门卫(服务器)问你拿身份证,你本人(浏览器)要拿你的身份证(session_id)给她看,如果他需要确定你的其他资料,你可以翻翻你的口袋(cookie)找给他,如果没有的话,只能手动写一份给他了。
然后你就得到了一份浏览证(session),用来识别你在这里小区是谁!
session在服务器上存储方式:
他以文件的形式存储,文件名为 session_id 他的session以数组的形式存储在文件内,他一般存在在wamp\tmp下,具体请查看PHP的php.ini文件,搜索session.save_path即可!默认路径的情况下,所有的session都在
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识
(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来
使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相
关联的session id,session id的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应
中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给
服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时
仍然能够把session id传递回服务器。
虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session 需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一 个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session 依据该Cookie(session_id)来识别是否为同一用户。
该Cookie为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。
因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。
注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择“在新窗口中打开”时,子窗口便可以访问父窗口的Session。
session 是保存在服务器端的,比如文件中, redis 中.
现在有很多客户端请求服务器,服务端也生成了很多 session,那么客户端每次请求是如何找到属于他的 session 呢?
原来每个客户端请求服务器时,服务器生成 session 时,都会给这个 session 分配一个唯一 id, 用来标示这个 session, 存到文件时,文件名就是这个 id, 存到 redis 时, redis 键就是这个 id.
然后再把这个 id 返回到客户端,并告诉客户端保存到 cookie 中.
header 响应
set-cookie:sessionid=123456
下次客户端访问就会带上这个 cookie, 服务端拿到 cookie 里的 id, 找到 session. 读取里面保存到数据.
PHP 获取 sessionid 的方法为
session_id();
可以获取指定 sessionid 中的内容
session_id(123456);
cookie和session是通过 session id来识别的。
session id一般保存在cookie中。
<a href="https://segmentfault.com/q/1010000007715137">Cookie禁用了,Session还能用吗?</a>
<a href="http://blog.csdn.net/jj_nan/article/details/71366498">保存session id的几种方式</a>