我的目标是跟踪所有登录用户,在一个由cherrypy驱动的网站。使用存储在内存(tools.sessions.storage_type = "ram")中的会话,我可以通过以下途径获得信息:
cherrypy.session.cache.values()
但是,对于存储在文件(tools.sessions.storage_type = "file")中的会话,尝试执行同样的操作,我得到:
AttributeError:'FileSession‘对象没有属性’缓存‘
如何访问存储在会话文件中的信息?
编辑:
Andrew的建议是从目录(由tools.sessions.storage_path提供)加载会话文件,并且不对文件进行分类。这在大多数情况下都是可行的,但有时其中一个文件仍然被锁定,并且解锁失败。另一方面,我不能相信当前会话有一个会话对象(即cherrypy.session),其他会话没有可用的对象,其中一个必须遍历会话文件.
发布于 2014-05-14 13:02:41
好的,看看cherrypy/lib/ session文件,我发现获取会话值会运行这个load函数.
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因此,您只需要模仿它,但也需要循环遍历会话文件文件夹中的所有会话。试试这样的..。
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())希望这能有所帮助!
发布于 2016-04-28 14:44:32
我将给您一个简单的使用python的班轮。
sessions = os.listdir('./tmp/sessions')
sessions = filter(lambda session: '.lock' not in session, sessions)首先,列出目录中的会话文件。然后,过滤掉锁文件。
https://stackoverflow.com/questions/23619240
复制相似问题