2014-05-12 6 views
0

내 목표는 cherrypy를 사용하는 웹 사이트에서 기록 된 모든 사용자를 추적하는 것입니다. RAM (tools.sessions.storage_type = "ram")에 저장된 세션으로 , 난을 통해 정보를 얻을 수 있습니다 : 동일한 작업을 수행하려고cherrypy : 모든 활성 세션을 얻는 방법 (storage_type = "file")

cherrypy.session.cache.values()

그러나 파일 (tools.sessions.storage_type = "file")에 저장된 세션을, 내가 얻을 :

AttributeError: 'FileSession' object has no attribute 'cache'

세션 파일에 저장된 정보에 액세스하는 방법은 무엇입니까?

편집 :

앤드류 Kloos의 제안은 (tools.sessions.storage_path에 의해 주어진) 디렉토리에서 세션 파일을로드 할 수 있으며, 취소 피클 파일. 이 방법은 대부분의 경우에 사용되지만 파일 중 하나가 여전히 잠금 상태이고 unpickling이 실패하는 경우가 있습니다. 다른 한편, 현재 세션 (즉 cherrypy.session)에 대해 개체이라는 세션이 있고 다른 세션에 사용할 수있는 개체가 없다고 생각할 수 없으며 그 세션을 통과해야합니다. 세션 파일 ...

+0

나는 조금 파고 다른 세션에 액세스하는 방법을 보지 못했습니다. 그러나 잠긴 파일이있는 경우에도 잠겨 있지 않은 동일한 파일의 버전이 있습니다. 잠금 파일을 제외하십시오. 내 대답을 업데이트 할게. –

답변

1

확인이 cherrypy/lib 디렉토리/세션을보고

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

희망이 있습니다.

+0

세션 파일을 보면, 나는 그들이 피클 파일과 어떻게 든 보입니다. –

0

저는 파이썬을 사용하여 간단한 하나의 라이너를 제공 할 것입니다.

sessions = os.listdir('./tmp/sessions') 
    sessions = filter(lambda session: '.lock' not in session, sessions) 

먼저 디렉터리에 세션 파일을 나열합니다. 그런 다음 잠금 파일을 필터링합니다.

+0

이것은 './tmp/sessions'에있는 파일에 세션을 저장한다고 가정합니다. –