Zope会话
项目描述
此软件包提供会话支持。
Zope3会话实现
概述
会话使我们能够在无状态协议(HTTP)上模拟状态。我们通过在多个HTTP请求中存储一个唯一的标识符来实现这一点,无论是cookie还是一些扭曲到URL中的id。
IClientIdManager 工具提供了这个唯一的ID。它负责传播这个ID,以便客户端未来的请求都获得相同的ID(例如,通过设置HTTP cookie)。(注意,为了演示目的,所有接口都从这个包中导入。它们已经被移动到 zope.session.interfaces)此工具在将请求适配到唯一客户端ID时使用。
>>> from zope.app.session.interfaces import IClientId >>> IClientId <InterfaceClass zope.session.interfaces.IClientId> >>> client_id = IClientId(request)
ISession 适配器为我们提供了一个映射,可以用来存储和检索会话数据。使用唯一的键(包ID)来避免命名空间冲突。
>>> from zope.app.session.interfaces import ISession >>> pkg_id = 'products.foo' >>> session = ISession(request)[pkg_id] >>> session['color'] = 'red'>>> session2 = ISession(request)['products.bar'] >>> session2['color'] = 'blue'>>> session['color'] 'red' >>> session2['color'] 'blue'
数据存储
实际数据存储在 ISessionDataContainer 工具中。ISession 通过使用包ID作为命名工具查找来选择应使用哪个 ISessionDataContainer。这允许网站管理员通过添加带有正确名称的所需 ISessionDataContainer 的注册来配置会话数据实际存储的位置。
>>> from zope.app.session.interfaces import ISessionDataContainer >>> from zope.component import getUtility >>> sdc = getUtility(ISessionDataContainer, pkg_id) >>> sdc[client_id][pkg_id] is session True >>> sdc[client_id][pkg_id]['color'] 'red'
如果无法使用包ID通过名称定位到 ISessionDataContainer 工具,则将未命名的 ISessionDataContainer 工具用作后备。将自动为您创建一个未命名的 ISessionDataContainer,如果您希望,可以用不同的实现替换。
>>> ISession(request)['unknown'] \ ... is getUtility(ISessionDataContainer)[client_id]['unknown'] True
ISessionDataContainer 包含 ISessionData 对象,而 ISessionData 对象又包含 ISessionPkgData 对象。除非您正在为会话机制编写管理视图,否则您通常不需要知道这一点。
>>> from zope.app.session.interfaces import ISessionData, ISessionPkgData >>> ISessionData.providedBy(sdc[client_id]) True >>> ISessionPkgData.providedBy(sdc[client_id][pkg_id]) True
ISessionDataContainer 负责过期会话数据。可以通过设置其 timeout 属性来配置过期时间。
>>> sdc.timeout = 1200 # 1200 seconds or 20 minutes
限制
会话中存储的数据必须是持久的或可序列化的。
>>> class NoPickle(object): ... def __getstate__(self): ... raise TypeError("Cannot serialize") >>> session['oops'] = NoPickle() >>> import transaction >>> transaction.commit() Traceback (most recent call last): ... TypeError: Cannot serialize
页面模板
会话数据可以通过TALES在页面模板文档中访问
<span tal:content="request/session:products.foo/color | default"> green </span>或
<div tal:define="session request/session:products.foo"> <script type="text/server-python"> try: session['count'] += 1 except KeyError: session['count'] = 1 </script> <span tal:content="session/count" /> </div>
CHANGES
5.0 (2023-02-10)
停止支持Python 2.7,3.5,3.6。
添加对Python 3.8,3.9,3.10,3.11的支持。
4.1.0 (2018-10-22)
添加对Python 3.7的支持。
4.0.0 (2017-05-29)
添加对Python 3.4,3.5,3.6和PyPy的支持。
移除对 ZODB3 和本包不使用的其他包的依赖,仅留下 zope.session。现在测试期间使用的包现在是测试依赖项。
3.6.2 (2010-09-01)
移除未声明的对 zope.deferredimport 的依赖。
3.6.1 (2010-02-06)
包含来自 zope.securitypolicy 的 meta.zcml。
3.6.0 (2009-02-01)
在测试中使用 zope.site 而不是 zope.app.folder。
3.5.2 (2009-01-27)
修复了测试中的 tearDown-Error。
3.5.1 (2007-10-31)
解决了 ZopeSecurityPolicy 废弃警告。
3.5.0 (2007-09-27)
发布以覆盖 download.zope.org/distribution 中的未标记、无理由的开发版本。
3.4.3 (2007-09-27)
修复了包元数据。
3.4.2 (2007-09-24)
重新发布以替换有缺陷的egg。
向 zope.session 添加了缺少的依赖项。
3.4.1 (2007-09-24)
向egg发行版添加了缺少的文件。
3.4.0 (2007-09-24)
首次发布文档。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
构建分发
zope.app.session-5.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 059e7f261e2320619fce16c2c077735db39bc42078880fbb2ee03f604be6733b |
|
MD5 | 32cfb890bd4053ee608ce9f8677499e7 |
|
BLAKE2b-256 | 54c3193baf850fe924357daa6ee159d1c66afea251955f1b45f77f526cdc8f2d |
zope.app.session-5.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 179346b8a50db1be3cc4f7622eed990864987b8a28cb5ead7ba74bd2ff3d1c5a |
|
MD5 | c6b4185bac1bf4bbc1837bf3772753b6 |
|
BLAKE2b-256 | 179b461243d963f64dd964a65799564d0dc5baeb5f4f75071d9ee2856bdbdb07 |