首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JMeter07-深入解析Session与Cookie

[warning] 通过与一些做测试的朋友交流,发现有一些工作了好几年的朋友,都并不了解Session与Cookie,这里,我用两个例子来给朋友们好好分析分析!

Session和Cookie相关概念实例演示:以Cookie记录用户状态实例演示:以Session记录用户状态Session和Cookie相关概念

Session和Cookie都是由服务器生成的

Session和Cookie都是键值对形式保存,主要用于存储特定的一些状态值。

Session保存在服务器Cookie保存在客户端。通常来说,Session的ID会以Cookie的形式返回给客户端的。

Session和Cookie都是有生命周期的。Cookie的生命周期受到Cookie自身的有效期和客户端的影响,一般来说,浏览器(客户端)是会自动将存活的Cookie封装在请求头里面,向服务器发送。如果Cookie有效期过期或客户端清理了Cookie,则发送的请求中就没有Cookie值;Session的生命周期受到Session自身的有效期和客户端是否关闭的影响。SessionID虽然是已Cookie的形式返回给客户端,但是它是不受客户的Cookie容器的管理,而是和客户端进程有关,即客户端进程不关闭,一般Session在客户端就不会失效。

Session和Cookie都是有作用域的。

[info]下面我会自己写一个例子来演示 看不懂相关代码的,可以留意一下我关于django方面的教程

实例演示:以Cookie记录用户状态

创建一个登陆与欢迎页面 ,页面逻辑如下:

代码解释:

如果用户已登录,则显示“欢迎您,xx”,并且提供注销按钮;

如果用户未登录,则显示一个登录窗口,让用户输入用户名与密码。

服务端代码逻辑如下:

代码解释:

如果是POST方式访问,从提交过来的数据中验证用户是否登录成功,登录成功便,并且返回给客户端,进入欢迎页。

如果是GET方式访问,则,如果从cookie中能获取到用户名,则认为用户已登录,返回欢迎页。

step1:首次访问http://127.0.0.1:8000/login_cookie/ 可以观察到 Request headers 中没有Cookie,页面处于未登录状态

step2:登录后(输入账号名ptqa,密码4399)自动跳转首页,此时可以观察到,在Response Headers 中存在Set-Cookie:username=ptqa; Path=/

从这里,我们也可以看见,cookie是在服务端设置的。这时候,客户端接收到服务端设置的cookie后,会保存在浏览器的cookie管理器中,下一次再请求时会自动带上这些cookie,服务端便会知道当前的用户是已经通过了登录校验的用户。如此这般,便能维持了会话的状态了。

step3:此时,刷新页面或新开窗口访问http://127.0.0.1:8000/login_cookie/ 可观察到请求中的Request Headers 中自动带上 Cookie:username=ptqa; 页面处于已登录状态。

总结:

显然,通过cookie的方式验证用户登录容易被破解,如下使用jmeter篡改Cookie值,则同样可以进入已登录状态显示界面,如下

发送请求后,可以看到,用户已经登录了。

实例演示:以Session记录用户状态

前端登录与欢迎页 逻辑如下:

代码解释:

如果用户已登录,则显示“欢迎您,xx”,并且提供注销按钮;

如果用户未登录,则显示一个登录窗口,让用户输入用户名与密码。

服务端的处理逻辑如下:

代码解释:

如果是POST方式访问,从提交过来的数据中验证用户是否登录成功,登录成功便,并且返回给客户端,进入欢迎页。

如果是GET方式访问,则,如果从Session中能获取到用户名,则认为用户已登录,返回欢迎页。

step1:首次访问http://127.0.0.1:8000/login_session/ 可观察到Request Headers 中并没有sessionId 并且处于未登录状态

step2:登录,输入账号ptqa,密码4399 ,在Response Headers 中可以观察到存在 Set-Cookie:sessionid=qigvbt2ckkcc5rydr46dehzjryg0mh41;

step3:重新刷新页面或新开窗口,则观察到在Request Headers 中带有Cookie Sessionid,并且处于登录状态。

显然,这种使用sessonid的方式比较安全,如果篡改sessionid,则无法进行登录。如下:

发送请求后,sessionid在服务端验证并不存在,所以依然是未登录的状态。

[info] 本人非专业开发,正在学习的路上,参考代码只供参考,写得不好,请不要见笑,将你写的认为更好的示例留言哦,一起交流学习~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180729G1J28F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com