Cookie
Cookie是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过HTTP协议,将他们本地的Cookie内容也发到咱们服务器上,从而完成验证。
Cookie又分为了会话Cookie与持久Cookie,要区分这两种类型,非常的简单,持久Cookie就是我们设置了它的过期时间,而没设置过期时间的,都属于会话Cookie。
因为当我们设置了Cookie的过期时间,那么这个Cookie就会存储在用户的硬盘中,而不是在内存中,因为不在内存中,不管用户是关闭浏览器,还是关机重启,只要在有效时间内,这个Cookie都能用。
-
Cookie 是存储在浏览器客户的一小片数据;
-
Cookie 可以同时被前台与后台操作;
-
Cookie 可以跨页面存取;
-
Cookie 是不可以跨服务器访问的;
-
Cookie 有限制; 每个浏览器存储的个数不能超过300个,每个服务器不能超过20个,数据量不能超过4K;
-
Cookie 是有生命周期的,默认与浏览器相同,如果进程退出,cookie会被销毁。
Session
Session 存储在我们的服务器上,就是在我们的服务器上保存用户的操作信息。
当用户访问我们的网站时,我们的服务器会成一个 Session ID,然后把 Session ID 存储起来,再把这个 Session ID发给我们的用户,用户再次访问我们的服务器的时候,拿着这个 Session ID就能验证了,当这个ID能与我们服务器上存储的ID对应起来时,我们就可以认为是自己人。
-
seesion 数据存储在服务器端;
-
每一个会话分配一个单独的 session_id;
-
该 session_id 通过 cookie 传送到前台,默认的 session_id 名称是PHPSESSIONID;
-
前台只能看到 Session 的 ID,而不能修改 Session 值;
-
使用 Session之前需要先开启会话;
-
Session存储在 Session数组 $_SESSION;
-
Session存储方式比较安全,但是如果 Session数量过多,会导致服务器性能下降。
两者区别
Cookiesession定义浏览器保存用户信息的文件,存储的数量和字符数都有限制服务器把sessionID 和用户信息、用户操作,记录在服务器上,这些记录就称为session相同点都是为了存储用户相关的信息存储客户端服务器安全性安全性不高,任何人都能直接查看安全性高。
两者结合使用
存储在服务端:通过 cookie存储一个 session_id,然后具体的数据则是保存在 session中。如果用户已经登录,则服务器会在 cookie中保存一个 session_id,下次再次请求的时候,会把该 session_id携带上来,服务器根据 session_id在 session库中获取用户的 session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做 server side session。
将 session数据加密,然后存储在 cookie中。这种专业术语叫做 client side session。
参考资料:
作者:闹闹吃鱼
原文链接:https://juejin.cn/post/6844903829285289998
作者:pingan8787
原文链接:https://xie.infoq.cn/article/fab17c2984212662b49f8a945