首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在twisted.web中使用会话/cookie?

如何在twisted.web中使用会话/cookie?
EN

Stack Overflow用户
提问于 2009-06-08 02:07:36
回答 3查看 4.5K关注 0票数 9

我正在用twisted.web实现一个http服务器。问题来了:有一个登录操作;在那之后,我想让http服务器记住每个使用acookie/session的客户机,直到用户关闭浏览器。

我已经阅读了twisted.web文档,但是我想不出该怎么做。我知道request对象有一个名为getSession()的函数,然后将返回一个session对象。下一步呢?如何在多个请求期间存储信息?

我也搜索了扭曲的邮件列表,没有什么很有帮助的,我仍然很困惑。如果有人以前用过这个,请给我解释一下,甚至在这里放一些代码,这样我自己就能理解了。非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2009-06-14 08:50:07

您可以使用"request.getSession()“来获取组件化的对象。

您可以阅读有关http://twistedmatrix.com/documents/current/api/twisted.python.components.Componentized.html中组件化的更多信息--使用组件化的基本方法是通过定义接口和实现,并将对象推入会话。

票数 4
EN

Stack Overflow用户

发布于 2009-08-19 13:50:46

调用getSession()将生成一个会话并将cookie添加到请求中:

getSession() source code

如果客户端已经有一个会话cookie,那么调用getSession()将读取它并返回一个包含原始会话内容的会话。因此,无论您的代码实际上是在创建会话cookie还是只是在读取它,它都是透明的。

会话cookies具有某些属性...如果您希望更好地控制cookie的内容,那么可以看看getSession()在场景背后调用的Request.addCookie()。

票数 4
EN

Stack Overflow用户

发布于 2012-05-25 13:32:45

请参阅此相关问题Store an instance of a connection - twisted.web。这里的答案链接到这篇博客文章http://jcalderone.livejournal.com/53680.html,其中显示了存储会话访问次数计数器的示例(感谢示例中的jcalderone ):

代码语言:javascript
复制
# in a .rpy file launched with `twistd -n web --path .`
cache()

from zope.interface import Interface, Attribute, implements
from twisted.python.components import registerAdapter
from twisted.web.server import Session
from twisted.web.resource import Resource

class ICounter(Interface):
    value = Attribute("An int value which counts up once per page view.")

class Counter(object):
    implements(ICounter)
    def __init__(self, session):
        self.value = 0

registerAdapter(Counter, Session, ICounter)

class CounterResource(Resource):
    def render_GET(self, request):
        session = request.getSession()
        counter = ICounter(session)   
        counter.value += 1
        return "Visit #%d for you!" % (counter.value,)

resource = CounterResource()

不要担心这看起来令人困惑-在这里的行为有意义之前,你需要理解两件事:

  1. Twisted (Zope) Interfaces & Adapters
  2. Componentized

计数器值存储在Adapter类中,Interface类记录该类提供的内容。之所以可以在适配器中存储持久数据,是因为Session (由getSession()返回)是组件化的子类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/963236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档