FastNetMon

Monday, 19 October 2009

Pylons: работа с сессиями

Итак, продолжим мучать Pylons :) Сейчас нам для полного веб-счастья не хватает возможности временно сохранять данные между запросами пользователей, для этой цели мы будем использовать сессии (в Pylons они предоставяются компонентом Beaker).

Для тестов добавим в код файла
vi myapp/controllers/main.py
новый метод, count, который будет считать число открытий страницы для данного юзера:

def count(self):
if session.has_key('users_count'):
session['users_count'] = session['users_count'] + 1
else:
session['users_count'] = 0

session.save()

return "Users count: ", session['users_count']


Тут все довольно тривиально, за исключением строки "session.save()", в Pylons необходимо явно указывать, что изменения в сессии требуется сохранить, для этого и вызывается метод save().

Ну и еще - краткое описание внутренностей работы сессий. В cookie пользователю помещается переменная с именем веб-приложения (myapp) со значением "e18f7176b0832b030a5df1041b6ffb877d5377e11e93e0e7e783584523192c65e946fafd", что представляет собой хеш код, по которому производится идентификация владельца сессии. Время жизни сессии - до закрытия браузера.

Ну вот и все, теперь при каждом обновлении страницы http://127.0.0.1/main/count число будет увеличиваться.

2 comments :

  1. Очень нужна помощь, по устранию бага с сессиями в проекте на Pylons+ Posrgesql + Baker. Бывает, что в сессию не заносятся данные... Залогиненный "оператор" стоя на странице клиента и оформляя ему заказ в момент "сохранения заказа"мгновенно оказывается на странице другого клиента с которым не работал вообще, но чаще с которым работал накануне. Работу (можно фриланс) по устранения бага хорошо оплатим!

    ReplyDelete
  2. Я не настолько спец по Pylons, к сожалению, чтобы такой баг помочь пофиксить. Как вариант, апгрейд до новых версий в надежде, что его уже нашли. Ну и баг-трекеры проектов почитать.

    ReplyDelete

Note: only a member of this blog may post a comment.