可能很多人看到这个问题就开始鄙视了,这也叫面试题?我们老师早就教过我们了,但是你老师未必告诉你最根本的东西,不信咱们试一试,如果浏览器禁用cookie功能,那么session是否能正常实现?
嘿嘿,谈到这里是不是开始懵逼了,这么说吧,你真的未必了解cookie和session,我以前也和大家一样认为cookie和session一点关系没有的,当我自学了开发后,才发现这两个东西是有依赖关系的,欲知具体如何,且听我给你娓娓道来。
先从最根本对的来说,为什么要有cookie和session,先看下面这段文字:
一句话:因为浏览器请求服务器是无状态的。
解释:
无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。
怎么解决无状态?有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
解决方案:
实现状态保持主要有两种方式:
在客户端存储信息使用
Cookie
在服务器端存储信息使用
Session
cookie原理图:
session原理图:
session在计算机网络应用中被称为“会话控制”。
客户端浏览器访问网站的时候
服务器会向客户浏览器发送一个每个用户特有的会话编号sessionID,让他进入到cookie里。
服务器同时也把sessionID和对应的用户信息、用户操作记录在服务器上,这些记录就是session。
客户端浏览器再次访问时,会发送cookie给服务器,其中就包含sessionID。
服务器从cookie里找到sessionID,再根据sessionID找到以前记录的用户信息就可以知道他之前操控些、访问过哪里。
session保存在服务器端比较安全,但是可能需要记录千百万用户的信息,对服务器的存储压力很大,所以我们应该有选择的合理使用cookie和session。
好了,说到这里其实我们只是了解了其原因,但是他两个又有什么关系呢?
关键是这里
1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里或数据库里或redis里或内存
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
说到这里终于了解了吧,也就是说session是依赖cookie实现的,所以文章最开始的问题也就解开了,如果浏览器禁用cookie,那么session功能也不能正常实现的,这个问题也教会了我,问题不能只了解起表面,还要了解其背后的实现原理。
好了,今天就给大家分享到这里,大家记得点个关注,感谢大家了。后续分享更多干货。
超哥测试提升,与你一起成长,测试内推群,期待你的加入。
超哥测试提升,带你步入15k-25k高级测试岗位,期待你的加入。