session和 cookie之间扯不完的千丝万缕关系

session简称S
cookie简称C
sessionid简称Sid


S和C用来保持会话的,确认用户标识的。

session文件主要存在session数组数据中$_SESSION,默认是暂用内存。

第一次请求,服务器产生sid给cookie, cookie存在本地,第二次请求cookie发送sid给服务器。(服务器用Sid匹配存储的S文件,并得到对应ID的S存储的其他数据)。

那么cookie什么时候过期?
如果没有设置 cookie时间,默认session会话结束,一般指关闭浏览器(此时服务器的S信息任然保存,但是 cookie已不保存,尽管S还没过期但是cookie已过期),意味着cookie也过期(消失)。

当然当长时间没请求时,默认会话是30分钟过期,服务器删除或者标识过期该Sid的S数据,尽管cookie还在但是S信息已过期,所以此时cookie发的sid过来也对应不上S数据,所以过期,当前会话结束。

如果设置了 cookie过期时间,那么如果 cookie未超时,下次还会用这个会话 sid去服务器找Sid数据,如果此时服务器 sid文件过期或者已被删除,则会自行创建该sid的S数据(但是其他S数组数据要重新写S数组),并正常会话。(即只要C不过期,它所保留的sid尽管服务器S已经过期可以重新生成该SID额会话文件)。

综上:
cookie 如果设置了时间决定权大于session 的过期时间,如果C过期则意味着没有Sid,服务器重新生一个sid,如果C没过期服务器会用他所保留的sid创建会话,尽管服务器S早已过期。

当然如果C和S其中任意一个过期失效则全部失效,S失效意味着 C的Sid在服务器没有对应文件,C失效意味着,C没有发送sid,则服务器重新生成sid.这种情况和上面设置了C时间的S过期不是同一个理解,注意区分。






原文地址:https://www.cnblogs.com/linewman/p/9918833.html