我的目标是在由cherrypy提供支持的网站中跟踪所有登录用户。
会话存储在RAM(tools.sessions.storage_type = "ram"
)中,我可以通过以下方式获取信息:
cherrypy.session.cache.values()
但是会话存储在文件(tools.sessions.storage_type = "file"
)中,尝试做同样的事情,我得到:
AttributeError:'FileSession'对象没有属性'cache'
如何访问存储在会话文件中的信息?
编辑:
Andrew Kloos的提议是从目录加载会话文件(由tools.sessions.storage_path给出),并取消文件的pickle。 这在大多数情况下都有效,但有时,其中一个文件仍然是LOCKED,并且unpickling失败。 另一方面,我无法相信当前会话有一个会话对象(即cherrypy.session),并且其他会话没有可用的对象,并且有义务浏览会话文件...
答案 0 :(得分:1)
好的查看cherrypy / lib / sessions文件我看到获取会话值会运行此加载函数...
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())
希望这有帮助!
答案 1 :(得分:0)
我只会使用python给你一个简单的单线。
sessions = os.listdir('./tmp/sessions')
sessions = filter(lambda session: '.lock' not in session, sessions)
首先,列出目录中的会话文件。 然后,您过滤掉锁定文件。