专栏首页Python程序员杂谈session与客户端cookie的关系

session与客户端cookie的关系

以前没有细想过session这个东西怎么保证服务器能够与每个客户端都保持准确的联系,只是以为是浏览器和服务器的协议而已,浏览器和服务器达成某种共识,有一个东西来专门标示客户端在服务器session中的不同。今天和同事讨论到session的问题,算是补上了自己的一个盲点。

session的原理大家都知道一二,在web服务器端,session是以散列表的方式存在(具体的存储形式可能有数据库表、cache、临时文件、服务器端cookie等形式),但在session这个散列表中有一个字段类似于sessionid的东西,是用来记录对应的客户端的,每一个客户端发来请求服务器都会在session中检测该客户端是否携带了sessionid,如果有,表示该客户端与服务器曾经发生过关系。没有,则会为其建立一个sessionid(这个建立的规则我还不清楚),不过这个sessionid会在客户端这次请求完之后带回去,保存。下一次该客户端再来请求,请求中自然就携带了该sessionid,当然,如果在一次请求完成之后,如果你把浏览器的cookie删除的话,sessionid自然就不存在了,所以你的和服务器的会话就找不到了,但是要意识到改会话是存在的。你可以拿百度登录来尝试一下,先登录,然后删除cookie,刷新页面,看看是不是登录状态没有了。

那么,刚才说到,删除cookie,登录状态没有,并不表示你在服务器端的session没了,也就是说,有些情况下,关闭浏览器,并不会消除服务器端的session,只不过是找不到了而已。

所以我们知道,客户端和服务器第一次发生关系(第一次请求)得到的信物sessionid是存在了cookie里。但是作为一个具有多年经验的web开发人员,我表示,无论是在写后台还是写前台的时候,都没有专门或者偶尔写从浏览器发送带有这个信物(sessionid)的任何消息到服务器端,那session为什么依然能准确认出哪些浏览器到底是不是他的相好儿的?so,真相就是,在你带她去访问session的时候,浏览器会偷偷的带上该信物(sessionid)以保证服务器依然记得她。

关于这个我们可以做一个试验来验证一下,这个试验做完在补充上来吧。

另外有些web服务器还可以通过在请求的url总添加类似于sessionid的参数来和服务器端进行认亲。

关于cookie的试验,拿百度来做试验,刚才自己用js试验了一下发现js无法写cookie的domain值为.baidu.com。于是知道找到chrome上面的Edit this cookie插件,完成了这个试验。

具体步骤就是,登录百度之后,找到baidu.com下面的BDUSS这个cookie,删除之,刷新页面,发现已经退出登录,然后自己再用chrome的插件添加该cookie的值,刷新,发现又处于登录态了。

另外还有一个发现,如果我用firefox登录之后,我把firefox中的cookie的BDUSS写到chrome中,发现同样已经变为登录状态了。那么我是不是假如我获取到你浏览器中的cookie的BDUSS值之后,也可以在我的机器上进行登录呢?再来试验一下。

同样也是可以的,不过你只能刷新当前页面,点击其他页面之后百度服务器端会进行验证,会验证完之后会让你当前的cookie失效。至于百度上是怎么验证的,我也很想知道。(另外发现一个问题,如果你把firefox上面的所有cookie都对应的写到chrome中,那么chrome中的那个百度账户将处于登录状态,并且可以进行所有操作,但是firefox这端的登录状态会被注销掉,即cookie已经不起作用,这又是怎么做的呢?PS:再次尝试,发现无法重现)

百度上好像是有严格限制的,但是在csdn上好像没有限制,我只要获取到某一个用户的登录cookie之后,在另一个浏览器上(或者另一台计算机上),可以对该用户的资料、博客等进行任何操作。可以说是绕过了系统的后台认证。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器人操作系统(ROS)在线实训平台学习实验指南

          在高校开设ROS相关课程已经积累了一年多的经验,由于自动化类专业在课程安排中不同于计算机相关专业,通常没有Linux相关的课程基础,直接上手ROS较...

    zhangrelay
  • ROS机器人项目开发11例-ROS Robotics Projects(4)物体检测与识别

    以find_object_2d为例(http://wiki.ros.org/find_object_2d):

    zhangrelay
  • 如何做出亮闪闪的毕业设计PPT?

    1 https://www.zhihu.com/question/23221029

    zhangrelay
  • ROS机器人操作系统在线练习

    通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下:

    zhangrelay
  • PDF与Word工具以及翻译网站推荐

    google翻译:https://translate.google.com/toolkit/list?hl=zh_CN#translations/active

    zhangrelay
  • Matlab基础题总结和习题提示

    安装与使用说明:https://blog.csdn.net/zhangrelay/article/details/79622079

    zhangrelay
  • ROS_Kinetic_27 在ROS中使用Cartographer进行SLAM

    Cartographer是谷歌新開源的通用的2D和3D定位與構圖同步的SLAM工具,並提供ROS接口。

    zhangrelay
  • ROS机器人项目开发11例-ROS Robotics Projects(9)虚拟现实VR头戴设备和Leap Motion手势操控

    除了自动驾驶汽车/人工智能外,还有一个火爆的科技热点就是虚拟现实/增强现实设备,这也是本书的第11章。

    zhangrelay
  • ROS机器人项目开发11例-ROS Robotics Projects(10)机器人Web工具集

    本书最后一章的内容是通过Web网页对机器人进行监测和控制等,使用的是Robot Web Tools。

    zhangrelay
  • 英文在线ROS学习与开发网站推荐theconstructsim

    Robotigniteacademy:https://www.robotigniteacademy.com/en/course/

    zhangrelay

扫码关注云+社区

领取腾讯云代金券