首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cherrypy:如何获取所有活动会话(storage_type = "file")

cherrypy:如何获取所有活动会话(storage_type = "file")
EN

Stack Overflow用户
提问于 2014-05-12 21:33:41
回答 2查看 936关注 0票数 1

我的目标是跟踪所有登录用户,在一个由cherrypy驱动的网站。使用存储在内存(tools.sessions.storage_type = "ram")中的会话,我可以通过以下途径获得信息:

cherrypy.session.cache.values()

但是,对于存储在文件(tools.sessions.storage_type = "file")中的会话,尝试执行同样的操作,我得到:

AttributeError:'FileSession‘对象没有属性’缓存‘

如何访问存储在会话文件中的信息?

编辑:

Andrew的建议是从目录(由tools.sessions.storage_path提供)加载会话文件,并且不对文件进行分类。这在大多数情况下都是可行的,但有时其中一个文件仍然被锁定,并且解锁失败。另一方面,我不能相信当前会话有一个会话对象(即cherrypy.session),其他会话没有可用的对象,其中一个必须遍历会话文件.

EN

回答 2

Stack Overflow用户

发布于 2014-05-14 13:02:41

好的,看看cherrypy/lib/ session文件,我发现获取会话值会运行这个load函数.

代码语言:javascript
复制
def _load(self, path=None):
    if path is None:
        path = self._get_file_path()
    try:
        f = open(path, "rb")
        try:
            return pickle.load(f)
        finally:
            f.close()
    except (IOError, EOFError):
        return None

因此,您只需要模仿它,但也需要循环遍历会话文件文件夹中的所有会话。试试这样的..。

代码语言:javascript
复制
import cherrypy
from cherrypy._cpcompat import pickle
import os

class HelloWorld(object):
    @cherrypy.expose
    def asdf(self):
        # loop through all the files in the sessions folder
        for FileName in os.listdir(os.path.abspath(os.path.dirname('sessions')) + '/sessions'):

            #  **EDIT**
            if(FileName.find('.lock') == -1)
                f = open(os.path.abspath(os.path.dirname('sessions')) + '/sessions/' + FileName, "rb")
                sessiondata = pickle.load(f)
                print(sessiondata[0]['FirstName'])
            #  **EDIT**

        cherrypy.session['FirstName'] = 'adsdf'
        return 'hi'

cherrypy.config.update({
                    'tools.sessions.on' : True,
                    'tools.sessions.storage_type' : 'file',
                    'tools.sessions.storage_path' : 'sessions'
                    })

cherrypy.quickstart(HelloWorld())

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2016-04-28 14:44:32

我将给您一个简单的使用python的班轮。

代码语言:javascript
复制
    sessions = os.listdir('./tmp/sessions')
    sessions = filter(lambda session: '.lock' not in session, sessions)

首先,列出目录中的会话文件。然后,过滤掉锁文件。

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

https://stackoverflow.com/questions/23619240

复制
相关文章

相似问题

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