2014-01-28 1 views
2

Имея проблемы со многими сессиями, файлы создаются иногда до 400 000! Я думал, что я мог бы обнаружить, если переменная сеанса не является Ни помощью получить, но как ни странно проверки переменной сеанса фактически создает сеансовый файл:Cherrypy создает сотни тысяч сеансов в день для сайта, получающего 500 уникальных пользователей. Должно ли это быть обработано следующим образом?

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

Я знаю, файл сеанса создать для каждого запроса, но если я не запустите cherrypy.session.get, файл сеанса удаляется. Если вы запустите следующий код на Cherrypy 3.2.4 после запроса 127.0.0.1:8080/main , файл сеанса удаляется.

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

Когда обычный пользователь делает первый запрос, получает ли он фиксированный идентификатор сеанса, так как у него нет файла 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): но тогда он не создает постоянную сессию для реальных пользователей. Но добавьте ответ, если у вас есть рабочий код - это может помочь кому-то. –

 Смежные вопросы

  • Нет связанных вопросов^_^