cookie机制
简单说,cookie类似于银行的账单,记录用户在其服务器上的所有记录。用户在浏览器中进行数据交换的时候,每次交换时候都要重新建立连接。如果我们有记住登录的需求,就是cookie的作用。cookie是HTTP服务器设置的机制,保存在浏览器中。
cookie生成
cookie是通过HTTP协议来是实现的,服务器通过在HTTP加上特殊指示生成相应的cookie,JavaScript和VBScript也可以生成cookie。
cookie内容
cookie的内容包括:名字,值,过期时间,路径和域。
session 定义
每当用户与服务端进行会话的时候,如登录成功(登录成功才有session)服务端会开一块内存区域来存放本次会话的内容数据,如用户名,密码等。对于每一个的名字sessionid来标记每一个区域的独有性(类似于身份证号吗)。这样的一块区间可以理解叫做session。
session机制
session机制是一种服务器端机制,服务器使用散列表结构保存信息,如果客户端第一次请求没有携带sessionid,此时服务器会创建session并在本次请求中将session id返回给客户端保存在cookie中。
sessioni失效
session每次会开辟一块内存区域,所以为节省空间,会进行失效机制设置,一般取决于服务器端设置的session过期时间,所以多数网站的长时间不操作,作为失效依据,删除并销毁资料,进行重新登录。
sessionid
sessionid用于标记session的一个key,它产生于在服务段创建Session的同时,会为这个sessionid生成唯一的sessionID 根据这个Sessionid在后面的请求中被重新获取,并且调用session相关方法进行内容的添加。
Python中requests.session()会话保持
会话保持顾名思义,保持客户端与服务端的会话状态,当使用session成功登录某个网站后,当再次使用该session对象请求该网站会默认使用session之前的cookie参数。 python中可以使用requests.session()维持会话用例:
# -*- coding: utf-8 -*-
import requests
# 登录模块创建全局session,在其他接口操作时带入登陆时的session,保持session的一致性
session = requests.session()
#验证Cookie是否可用
cookies_key = username + 'admin:cookies'
jsessionid = redis_object.get(cookies_key)
#可以验证一下是否get到jessionid
if jsessionid:
redis_object.expire(cookies_key, 300) # 保存cookie 300秒
cookies = {
'JSESSIONID':jsessionid
}
self.session.cookies = requests.utils.cookiejar_from_dict(cookies, cookiejar=None, overwrite=True)
# 检查是否有命中cookies
print('cookie命中')
return True, error
else:
print('cookie未命中,开始登录')