2014-01-28 22 views
2

无法创建多个会话文件,有时会高达400,000!我想,如果一个会话变量不是无使用GET但奇怪的是检查会话变量实际上创建一个会话文件,我可以发现:Cherrypy每天创建数十万个会话,可接收500个平均独特用户。应该如何处理?

if(cherrypy.session.get('Something')): 

我知道会话文件创建为每个请求,但如果我不这么做运行cherrypy.session.get会话文件被删除。如果在请求127.0.0.1:8080/main 之后在Cherrypy 3.2.4上运行以下代码,会话文件将被删除。

import cherrypy 

class Root: 
    def main(self): 
     return 'Howdy' 
    main.exposed = True 

cherrypy.config.update({'tools.sessions.on': True, 
         'tools.sessions.storage_type': "File", 
         'tools.sessions.storage_path': 'sessions', 
         'tools.sessions.timeout': 1440 
       }) 

cherrypy.quickstart(Root(),'/') 

但是,执行此代码将创建会在1440分钟超时的会话变量。

import cherrypy 

class Root: 
    def main(self): 
     if(cherrypy.session.get('Something')): 
      asdf = 'asdf' 
     return 'Howdy' 
    main.exposed = True 

cherrypy.config.update({'tools.sessions.on': True, 
         'tools.sessions.storage_type': "File", 
         'tools.sessions.storage_path': 'adf', 
         'tools.sessions.timeout': 1440 
       }) 

cherrypy.quickstart(Root(),'/') 

所以我如何检查,如果用户有没有产生未删除的服务器端的会话文件会话变量?

任何帮助,将不胜感激, 安德鲁

+0

你为什么会这么多会话? CherryPy和会话中没有提供静态文件,对吗? – jwalker

+0

否 - nginx正在为我的静态内容提供服务。我们认为这些是产生多余会话的机器人。 –

+0

当普通用户提出第一个请求时,他们是否获得固定会话ID,因为他们没有cookie?机器人请求与普通的用户第一次请求有什么不同? – jwalker

回答

0

确定这似乎工作。由于执行cherrypy.session.get('_ cp_Email')会导致永久性会话,因此我找到了一种检查会话文件是否存在的方法。当永久会话存在时,会出现一个“session-”+ cherrypy.session.id文件(一个不带.lock扩展名)。此代码检查...

def check_for_session(self=None): 
    return os.path.isfile(os.path.join(os.getcwd(), 'sessions/session-' + cherrypy.session.id)) 


def index(self=None): 
    if(check_for_session() and cherrypy.session.get('_cp_Email')): 
     Email = cherrypy.session[('_cp_Email'] 

希望这可以帮助别人!

+0

'cherrypy.session.originalid'不工作吗? – jwalker

+0

我尝试了这样的:if(cherrypy.session.originalid!= None和cherrypy.session.get('Something')== False):但它不会为真实用户创建永久会话。但如果您有工作代码,请添加一个答案 - 它可能有助于某人。 –

相关问题