Zope会议

zope.app.session的Python项目详细描述


此包提供会话支持。

Zope3会话实现

注意

此包提供的所有接口和实现 已迁移到zope.session。这个包裹现在 仅提供ZMI菜单配置。

概述

小心!

会话数据在服务器上维护。这就保证了 优点是我们可以假设客户没有篡改 数据。然而,这可能对可伸缩性有重大影响 因为过于频繁地修改会话数据可能会带来很大的负载 在服务器上和极端情况下会使您的站点不可用。 开发人员在编写代码或风险时应牢记这一点 在生产环境中运行应用程序时出现的问题。

需要写密集型会话实现的应用程序(例如 作为页面计数器)应考虑使用cookies或专用的 会话实现。

会话允许我们通过无状态协议(http)伪造状态。 我们通过在多个 http请求,不管是cookie还是某个id被破坏到url中。

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选择应该由哪个ISessionDataContainer使用 使用包ID作为命名实用程序查找。 站点管理员配置会话数据的实际位置 通过添加所需^{tt5}的注册来存储$ 用正确的名字。

>>> 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'

如果没有ISessionDataContainer实用程序,则可以使用 包id,则未命名的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

页面模板

Session data may be accessed in page template documents using TALES:

<span tal:content="request/session:products.foo/color | default">
    green
</span>

or:

<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>

更改

4.1.0(2018-10-22)

  • 添加对Python3.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)

  • 修正了测试中的拆卸错误。

3.5.1(2007-10-31)

  • 解决ZopeSecurityPolicy弃用警告。

3.5.0(2007-09-27)

  • 覆盖未标记的未读内容的释放Oned开发人员发布 download.zope.org/distribution

3.4.3(2007-09-27)

  • 修复包元数据。

3.4.2(2007-09-24)

  • 更换有问题的鸡蛋
  • 已将缺少的依赖项添加到zope.session

3.4.1(2007-09-24)

  • 将丢失的文件添加到egg分发中

3.4.0(2007-09-24)

  • 初始文件发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android同步不同页面上的按钮   java评测每个类收集的垃圾对象实例数   java(Spring MVC+Hibernate 4+Test 4)自动连线DAO返回NULL   java Android编辑文本和虚拟键盘   java Selenium与BrowserMobProxy   JAVAlang.NoClassDefFoundError:com/sun/jersey/spi/inject/Errors$关闭原因?   java为什么在我成功登录后仍然会出现“不正确的帐户或密码或用户类型”   安卓应用程序在重新启动java时崩溃。网UnknownHostException:无法解析主机   多线程在Java中同步共享静态对象的正确方法是什么?   未调用自定义注释的java类验证(约束类)   java如何将指定目录的存档文件放入所需位置?   java如何识别Selenium中的每个编辑文本字段,如果它们的Xpath都相同   使用gwtmockito/mockito的java简单单选按钮单元测试?