Cookie和Session的使用详解
我们在使用接口请求时经常听到Cookie和Session的知识,那么它们的实际意义和使用场景在哪里呢 ? 介绍如下
一、首先需要了解的是为什么需要有Cookie和Session这两个东西:Http是无状态协议,Cookie和Session的引入就是为了进行状态管理。
Cookie的产生:由服务端生成,存储在响应头中,返回给客户端,客户端会将cookie存储下来
Session的产生:由服务端生成,存储在服务器端的内存、缓存、数据库等地方
二、服务请求的传递过程
在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头中,发送给服务端。
那么问题就出现了,请求都是由客户端发起的,当服务端生成了session,客户端怎么会知道呢?客户端怎么能对上这个session暗号?
整个传递过程如下:
1、在客户端给服务端发送请求后,服务端会根据请求信息生成session,同时生成一个session_id,通过cookie返回给客户端
2、客户端再次向服务端发送请求时,会通过cookie将这个session_id发送给服务端,这样就对上了session的暗号
验证程序代码如下:
# -*- coding: utf-8 -*-
import requests
# 登录数据
login_url='http://119.23.241.154:8080/futureloan/mvc/api/member/login'
login_data={'mobilephone':'','pwd':''}
# 充值数据
recharge_url = 'http://119.23.241.154:8080/futureloan/mvc/api/member/recharge'
recharge_data = {'mobilephone':'','amount':''} # -------------------------------------------以下是cookie的方式----------------------------------------------------
# 登录请求
response_log = requests.get(login_url, login_data)
res_login = response_log.json() # 返回结果转换json格式
cookies_log = response_log.cookies.get_dict() # 获取Cookie的字典格式
print('登录结果是{0}'.format(res_login))
print('登录产生的cookie是{0}'.format(cookies_log))
print('JSESSIONID:{0}'.format(cookies_log['JSESSIONID']))
运行结果如下:

1、登录成功后才会产生cookie
2、你要获取cookie就要从响应结果response里面去获取
3、cookie类似于字典格式,可以用key取value的值
然后第二个“充值”接口是需要依赖登陆cookie的,如果不传递cookie值结果如下
# -*- coding: utf-8 -*-
import requests
# 登录数据
login_url='http://119.23.241.154:8080/futureloan/mvc/api/member/login'
login_data={'mobilephone':'','pwd':''}
# 充值数据
recharge_url = 'http://119.23.241.154:8080/futureloan/mvc/api/member/recharge'
recharge_data = {'mobilephone':'','amount':''} # -------------------------------------------以下是cookie的方式----------------------------------------------------
# 登录请求
response_log = requests.get(login_url, login_data)
res_login = response_log.json() # 返回结果转换json格式
cookies_log = response_log.cookies.get_dict() # 获取Cookie的字典格式
# print('登录结果是{0}'.format(res_login))
# print('登录产生的cookie是{0}'.format(cookies_log))
# print('JSESSIONID:{0}'.format(cookies_log['JSESSIONID']))
# print('登录产生的cookie是{0}'.format(cookies_log.get_dict()))
# #1、登录成功后才会产生cookie 2、你要获取cookie就要从响应结果response里面去获取 3、cookie类似于字典格式,可以用key取value的值
#
# ==========充值请求==============
# # 如果不加cookie 会一直显示{'data': None, 'status': 0, 'code': None, 'msg': '抱歉,请先登录。'}
# res_recharge = requests.post(recharge_url, recharge_data, cookies=cookies_log).json() # cookies=cookies关键字参数 key=values,如果是headers就headers=values
res_recharge = requests.post(recharge_url, recharge_data).json() # 无cookie传递的情况 print('充值结果是{0}'.format(res_recharge))
结果如下 :
提示需要先登陆

加上cookie信息后(加cookie的方式参照我注释的倒数第三行),可以正常返回充值信息:

三、会话对象session
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。
session会自动管理cookie,一个session对象会保持同一个会话中的所有请求之间的cookie信息
验证代码如下,当我们不实用cookie,直接使用session时也能保持登录
import requests
# 登录数据
login_url='http://119.23.241.154:8080/futureloan/mvc/api/member/login'
login_data={'mobilephone': '', 'pwd': ''}
# 充值数据
recharge_url = 'http://119.23.241.154:8080/futureloan/mvc/api/member/recharge'
recharge_data = {'mobilephone': '', 'amount': ''}
s = requests.session() # 产生一个会话,无直接进行cookie传递
res_login2 = s.get(login_url, params=login_data).json() # 登录在这个会话下发起get请求 get只能传一个参数, def get(self, url, **kwargs):
res_recharge2 = s.post(recharge_url, recharge_data).json() # 充值在这个会话下发起post请求
print('登录结果是{0}'.format(res_login2))
print('充值结果是{0}'.format(res_recharge2))
运行结果如下:

均能正常返回结果。
总结
1、状态处理:每次请求服务器都要校验你的状态 通过cookie seeion校验
2、cookie 存在本地
seeion 存在服务器 会话的意思
3、每次提交请求的时候 会随带cookie 发送至服务器 检查会话是否已过期
4、当你在同一个会话下面 你可以直接请求
5、会话对象session比cookies更方便管理请求的cookie信息
Cookie和Session的使用详解的更多相关文章
- cookie 与 session 的区别详解
[转]cookie 与session 的区别详解 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当 ...
- Cookie,Session,Token详解
Cookie,Session,Token详解 Cookie : 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. Cookie由服务器生成,发 ...
- cookie 和session 的区别详解
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
- Cookie和Session的区别详解
本文引用自:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一 ...
- 【转】Cookie和Session的区别详解
转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的 ...
- COOKIE和session的机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 前端数据存储方案集合(cookie localStorage等)以及详解 (二)
前端数据存储方案集合(cookie localStorage等)以及详解 (二) 在之前的文章中已经介绍到了 前端存储方案中的 cookie . 但是 cookie 的存储上限是 4KB. 如果超过了 ...
- session和cookie的区别和联系详解,Cookie Session相关看这篇就够了。
本文转自:91博客:原文地址:http://www.9191boke.com/199015867.html 有一朋友做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么 ...
- Java_cookie 和session 的区别详解
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
随机推荐
- rm、shutdown、磁盘挂载、vi使用方法
1. 系统管理文件 1.1 rm 文件与目录有关命令 删除命令 (慎用) --- 数据是否备份了 rm === remove rm /oldboy/oldboy.txt --- 删除文件 rm ...
- Linux CentOS删除或重命名文件夹和文件的办法
Linux.CentOS操作系统下如何删除和重命名文件夹呢?办法如下: 一.Linux.CentOS下重命名文件和文件夹 mv:move 用移动文件命令就可以了,因为linux系统没有专门的重命名命令 ...
- 【koa2基础框架封装】基于Proxy路由按需加载器和初始加载器
我们在使用koa2做路由拦截后一般都习惯于直接将查找对应处理函数的过程映射到项目的文件夹目录,如: router.get('/test', app.controller.index.test); ap ...
- ZooKeeper入门(二) Zookeeper选举
1 背景 1.1 什么是leader选举 在zookeeper集群中,每个节点都会投票,如果某个节点获得超过半数以上的节点的投票,则该节点就是leader节点了 1.2 zookeeper集群选举le ...
- 深入理解C#的装箱和拆箱
个人理解(本质): 封箱是把值类型转换为引用类型 拆箱是把引用类型转换为值类型 封箱是把值类型转换为System.Object类型,或者转换为由值类型实现的接口类型: 例如: struct Mystr ...
- kuangbin专题 专题一 简单搜索 非常可乐 HDU - 1495
题目链接:https://vjudge.net/problem/HDU-1495 题意:有两个空杯(分别是N升和M升)和一罐满的可乐S升,S = N + M,三个容器可以互相倾倒,如果A倒入B,只有两 ...
- Node热部署插件
一.supervisor 首先需要使用 npm 安装 supervisor(这里需要注意一点,supervisor必须安装到全局) $ npm install -g supervisor Linux ...
- 硬件笔记之Thinkpad T470P更换2K屏幕
0x00 前言 手上的Thinkpad T470P屏幕是1920x1080的屏幕,色域范围NTSC 45%,作为一块办公用屏是正常配置,但是考虑到色彩显示和色域范围,计划升级到2K屏幕. 2k屏幕参数 ...
- linux 定时任务 crontabs 安装及使用方法
boom 安装 crontab yum install crontabs centos7 自带了我没有手动去装 启动/关闭 service crond start // 启动服务 service cr ...
- python,看看有没有你需要的列表元祖和range知识!
列表--list 列表:列表是python的基础数据类型之一,存储多种数据类型 可变 支持索引 可切片 方便取值 li = ['alex',123,Ture,(1,2,3,'wusir'),[1,2, ...