Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 10, 2013 01:23:06

NurDus
Зарегистрирован: 2013-08-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с куками в bottle

Доброго времени суток.
Есть 2 простые функции одна добавляет куки, вторая считывает:

@bottle.get('/ajax/add_product/<product_id>/<count>')
def add_product(product_id = 0, count = 1):
    ttt = bottle.request.get_cookie("basket")
    basket = sessions.get_value(ttt, 'basket')
    print 'ttt 1: ', ttt
    print 'basket 1: ', basket
    if ttt == None:
        ttt = sessions.start_session('test_value', 'basket')
        bottle.response.set_cookie("basket", ttt)
        print 'new session id: ', ttt
    else:
        sessions.start_session('test_value', 'basket', ttt)
        print 'old session id: ', ttt
    bottle.redirect("/")
@bottle.route('/basket')
def basket():
    dd = default_data()
    ttt = bottle.request.get_cookie("basket")
    basket = sessions.get_value(ttt, 'basket')
    print 'ttt 0: ', ttt
    print 'basket 0: ', basket 
    return bottle.jinja2_template('basket.html', dict(dd, basket = basket))

Надо отметить, что для обработки других куков (например входа в систему или передачи некоторого сообщения) всё работает. Думаю что “опечатка”, полностью переписал код… но ничего не помогло.

В результате получаю:
Bottle v0.11.6 server starting up (using WSGIRefServer())...
Listening on http://localhost:80/
Hit Ctrl-C to quit.
ttt 1:  thDEuRyzfmJjdNfHYHPWUoEvObusveka
basket 1:  None
old session id:  thDEuRyzfmJjdNfHYHPWUoEvObusveka
127.0.0.1 - - [10/Aug/2013 02:21:57] "GET /ajax/add_product/2/3 HTTP/1.1" 303 0
127.0.0.1 - - [10/Aug/2013 02:21:57] "GET / HTTP/1.1" 200 24858
ttt 0:  None
basket 0:  None
127.0.0.1 - - [10/Aug/2013 02:21:59] "GET /basket HTTP/1.1" 200 19797

Может кто сталкивался?!.. Заранее большое спасибо.

Отредактировано NurDus (Авг. 10, 2013 01:26:01)

Офлайн

#2 Авг. 13, 2013 08:30:30

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Работа с куками в bottle

Куки при редиректе устанавливаются по методу “бабушка надвое сказала”. Бывало, что что-то работает год, ничего не трогается, а потом возвращаешься к этому - и просто никак, вообще и в принципе. А у кого-то может продолжать работать.

Лучший метод, на мой взгляд - не использовать одновременно установку кукей и сервер-сайд редирект.

Второй момент - разные пути. В документации по bottle сказано, что по умолчанию будет path='/', но это не так. Нужно в данном случае явно прописывать в set_cookie (…,path='/')



Бейсик - не порок, Гвидо - не пророк

Офлайн

#3 Авг. 13, 2013 09:35:00

NurDus
Зарегистрирован: 2013-08-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с куками в bottle

Ок, благодарю… Буду пробовать что нить другое. О результатах отпишу.

Офлайн

#4 Авг. 14, 2013 22:27:59

NurDus
Зарегистрирован: 2013-08-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с куками в bottle

Доброго времени суток.

path = ‘/’ не помогло, но проблему решил…
вместо: @bottle.get('/ajax/add_product/<product_id>/<count>')
использовал: @bottle.get('/add_product/<product_id>/<count>')

куки заработали (даже в redirect-ом)… конечно это скорее костыль, но меня устраивает (пока).

Всем большое спасибо!

Офлайн

#5 Авг. 15, 2013 03:26:50

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Работа с куками в bottle

path='/' нужно и в set_cookie и в get_cookie, и старые куки удалить



Бейсик - не порок, Гвидо - не пророк

Офлайн

#6 Авг. 15, 2013 08:33:27

NurDus
Зарегистрирован: 2013-08-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с куками в bottle

Ок, благодарю. Буду иметь ввиду.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version