Python session介绍与使用

本文介绍了Django中五种session引擎的配置方法,包括数据库、缓存、文件、缓存+数据库以及加密cookie。详细讲解了如何获取、设置和删除session数据,以及session的生命周期管理,如设置失效时间。此外,还提到了session操作的字典接口和清理过期session的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django内部支持5种session引擎:
在这里插入图片描述
settings.py文件内设置

  • 数据库

SESSION_ENGINE = ‘django.contrib.sessions.backends.db’

  • 缓存

SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’
SESSION_CACHE_ALIAS = ‘default’ # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

  • 文件

SESSION_ENGINE = ‘django.contrib.sessions.backends.file’
SESSION_FILE_PATH = os.path.join(BASE_DIR, ‘cache’) # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

  • 缓存+数据库

SESSION_ENGINE = ‘django.contrib.sessions.backends.cached_db’

  • 加密cookie

SESSION_ENGINE = ‘django.contrib.sessions.backends.signed_cookies’

**注意: 以上5种引擎均支持session默认参数设置,使用方式相同**
  • 使用方法:

    获取:

    request.session['key'] # 不存在报错
    request.session.get('key', None) # 无值返回None
    

    设置:

    request.session['key'] = 'value'
    request.sessino.setdefault('key', 123) # 不存在设置默认值,存在不设置
    

    删除某个值:

     del request.session['key']
    

    删除当前用户的所有session数据:

     request.session.delete('session_key')
    

    清除:

     request.session.clear()
    
  • 支持.keys() .values() .items() .iterkeys() .itervalues()等一些字典操作方法

    获取用户的随机字符串:

    request.session.session_key
    

    删除失效日期小于当前日期的数据:

    request.session.clear_expired()
    

    判断随机字符串是否存在session内:

    request.session.exists('session_key')
    

    设置session失效时间:

    request.session.set_expirp(value)
    						value:整数,该秒数后失效
    						value:datatime/timedelta,在该时间后失效
    						value:0 关闭浏览器失效
    						value:None,依赖全局失效策略
    

    session参数设置:

    	SESSION_COOKIE_NAME"sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
    	SESSION_COOKIE_PATH"/"                               # Session的cookie保存的路径(默认)
    	SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
    	SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认False)
    	SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认True)
    	SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认1209600SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认False)
    	SESSION_SAVE_EVERY_REQUEST = True                       # 是否每次请求都保存Session,默认修改之后才保存(默认False):失效时间从最后请求算起
    

查看更多
查看更多

<think>嗯,用户想知道在Python中如何使用session以及它的具体应用场景。首先,我得回忆一下相关的知识。记得requests库里的session对象,用来保持跨请求的某些参数,比如cookies和headers。这样可以避免每次请求都要重新设置这些参数,提高效率,特别是在处理需要登录的网站时。 接下来,用户可能需要具体的代码示例。比如创建session对象,然后用它发送get或post请求。我记得引用3中提到,使用同一个session对象可以传递cookie数据,所以应该强调这一点。另外,引用4提到sessionID的创建,可能和服务器端会话管理有关,但用户的问题可能更多关注客户端的使用。 然后,应用场景方面,保持会话状态是关键。比如模拟登录,多个接口需要认证,或者需要共享cookies的情况。引用3里的例子应该适用,比如连续操作需要维持登录状态。 可能还要对比一下sessioncookie的区别,虽然用户没直接问,但有助于他们理解。引用2和引用4提到Django中的session引擎,但用户的问题可能更偏向于使用requests库,而不是Django框架。需要区分清楚,避免混淆。 另外,注意事项部分,比如关闭session,异常处理,超时设置,这些对用户来说也很重要。确保代码的健壮性。 最后,生成相关问题时要围绕session的扩展使用,比如如何保持长连接、安全性问题、分布式系统中的处理,以及cookie的关系。这些可以帮助用户进一步学习。 需要检查引用是否准确,确保每个引用对应正确的知识点。例如,引用1和引用3都提到了requests.session使用,而引用2和4更多是关于Django和基础概念,可能需要适当提及,但重点放在用户可能需要的requests库部分。</think>### PythonSession的用法详解 #### 一、Session的基本概念 Session(会话)是用于在多个HTTP请求之间保持用户状态的机制。服务器通过Session ID标识用户身份,客户端通过Cookie或URL重写方式存储该标识[^4]。在Python中,`requests.Session`对象可自动管理Cookie和连接池,提高请求效率[^1][^3]。 #### 二、Session的创建使用 ```python import requests # 1. 创建Session对象 session = requests.Session() # 2. 发送带Session的请求 login_response = session.post('https://example.com/login', data={'user':'test','pwd':'123'}) profile_response = session.get('https://example.com/profile') # 自动携带登录后的Cookie # 3. 关闭Session session.close() ``` *关键特性:* - 自动维护Cookie(通过`session.cookies`访问) - 支持连接池复用(TCP连接复用提升性能) - 可设置默认请求头(通过`session.headers.update()`) #### 三、核心应用场景 1. **保持登录状态** 需要认证的连续操作(如电商网站的加购→结算→支付流程)必须使用同一个Session对象[^3] 2. **跨接口数据传递** 当多个接口需要共享Cookie或认证令牌时: ```python session = requests.Session() session.get('https://api.example.com/init') # 获取初始token session.post('https://api.example.com/data', json={'token': session.cookies.get('token')}) ``` 3. **性能优化场景** 高频请求同一域名时,Session的TCP连接复用可减少20%-30%的网络开销 4. **统一请求配置** 统一设置请求头、超时时间、代理等参数: ```python session.headers.update({'User-Agent': 'Custom Agent/1.0'}) session.proxies = {'http': 'http://10.10.1.10:3128'} ``` #### 四、注意事项 1. **生命周期管理** 建议使用`with`语句自动管理资源: ```python with requests.Session() as session: session.get('https://example.com') ``` 2. **异常处理** Session对象需要配合异常处理: ```python try: response = session.get(url, timeout=5) except requests.exceptions.RequestException as e: print(f"请求失败: {e}") ``` 3. **敏感数据处理** 使用后应及时清除敏感信息: ```python session.cookies.clear() del session.headers['Authorization'] ``` #### 五、Cookie的区别 | 特性 | Session | Cookie | |------------|-----------------------------|---------------------| | 存储位置 | 服务器端 | 客户端 | | 安全性 | 较高(存储Session ID) | 较低(直接存储数据)| | 数据量限制 | 无限制 | ≤4KB | | 实现方式 | 依赖Cookie或URL重写[^4] | 直接存储在浏览器 | : Python处理session的方法整理 : 接口间cookie传递必须使用相同session对象 [^4]: Session通过SessionID标识用户
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值