session时有时没_面试题:你真的了解cookie和session吗

可能很多人看到这个问题就开始鄙视了,这也叫面试题?我们老师早就教过我们了,但是你老师未必告诉你最根本的东西,不信咱们试一试,如果浏览器禁用cookie功能,那么session是否能正常实现?

        嘿嘿,谈到这里是不是开始懵逼了,这么说吧,你真的未必了解cookie和session,我以前也和大家一样认为cookie和session一点关系没有的,当我自学了开发后,才发现这两个东西是有依赖关系的,欲知具体如何,且听我给你娓娓道来。

         先从最根本对的来说,为什么要有cookie和session,先看下面这段文字:

  • 一句话:因为浏览器请求服务器是无状态的。

  • 解释:

  • 无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。

  • 无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。

  • 怎么解决无状态?有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等

  • 解决方案:

  •      实现状态保持主要有两种方式:

    • 在客户端存储信息使用Cookie

    • 在服务器端存储信息使用Session

cookie原理图:

c3e7e0571071707f28725d493cf4562a.png

session原理图:

e5f693c17d6afc9cefb56fe3f501bc57.png

session在计算机网络应用中被称为“会话控制”。

b9be13a46d2a8fda70500846b20f9d5e.png

客户端浏览器访问网站的时候

6fdf3ee90304820970c838fc3b43bc3a.png

服务器会向客户浏览器发送一个每个用户特有的会话编号sessionID,让他进入到cookie里。

b9be085f1f1552705cd5e00bae2b5fe6.png

服务器同时也把sessionID和对应的用户信息、用户操作记录在服务器上,这些记录就是session。

be08244c1ff6cd39cc0da0e4b4366549.png

客户端浏览器再次访问时,会发送cookie给服务器,其中就包含sessionID。

19e804e66e8d00210956b9680775066a.png

服务器从cookie里找到sessionID,再根据sessionID找到以前记录的用户信息就可以知道他之前操控些、访问过哪里。

78670bcda7467bb3ab8ef4bfcfaacff1.png

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高级测试岗位,期待你的加入。

b39bab8233dc4e68feb1d0c5368145bb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值