Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2011 16:51:59

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

Хочется чтоб бейкер регистрировал сессии с разных доменов например test1.com, test2.com. Текущая конфигурация регистрирует только поддомены test.com.
Заранее список доменов не известен и может быть произвольной величины.

from beaker.middleware import SessionMiddleware
session_opts = {
'session.type': 'file',
'session.cookie_expires': 300,
'session.data_dir': './session_data',
'session.timeout': 3000,
'session.cookie_domain': '.test.com'
}
application = SessionMiddleware(bottle.app(), session_opts)
Может как то можно задавать опции динамически?



Отредактировано (Авг. 6, 2011 17:03:35)

Офлайн

#2 Авг. 7, 2011 09:05:40

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

Если это одно приложение с несколькими доменами, то можно на сервере сделать реврайтинг урла: test1.com -> test.com, test555.com -> test.com.
Если разные приложения, то такой вариант: у каждого приложения свой обработчик сессий и сделать междоменную авторизацию, по принципу OpenID.

Офлайн

#3 Авг. 14, 2011 19:37:21

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

Это одно приложение которое отдает контент в зависимости от домена. И оно должно различать домены. Проблема в том что прописать сессии получается тока на test.com и все его поддомены, а на скажем test1.com уже не сохраняются куки.



Офлайн

#4 Авг. 14, 2011 22:29:44

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

alexandre
Это одно приложение которое отдает контент в зависимости от домена. И оно должно различать домены. Проблема в том что прописать сессии получается тока на test.com и все его поддомены, а на скажем test1.com уже не сохраняются куки.
Тогда междомменую авторизацию.

Офлайн

#5 Авг. 15, 2011 03:49:34

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

Междомменую авторизацию нужно делать через сохранение в базе а в бейкере насколько я понял есть только sql базы и мемкешед. Так что придется ченить свое для сессий написать.



Офлайн

#6 Авг. 15, 2011 12:11:45

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

Сейчас проверил редиректы в ajax, позволяет сделать 1 редирект.
В итоге можно сделать фоновую авторизацию:
1) Пользователь заходит на сайт,
2) если нашей куки нет, то клиент фоново ($.get/$.post) посылает запрос серверу,
3) сервер редиректит этот запрос на сервер авторизации (СА),
4) СА отдает клиенту информацию-ключ для того что-бы можно было авторизоваться на любом нашем сервере.
5) Клиент посылает этот ключ нашему серверу, и сервер возвращает куку клиенту - клиент авторизирован.

в итоге получилось 2 (3) запроса от клиента,

Офлайн

#7 Авг. 15, 2011 20:32:15

blessmaster
От:
Зарегистрирован: 2010-12-07
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

o7412369815963
Сейчас проверил редиректы в ajax, позволяет сделать 1 редирект.
В итоге можно сделать фоновую авторизацию:
1) Пользователь заходит на сайт,
2) если нашей куки нет, то клиент фоново ($.get/$.post) посылает запрос серверу,
3) сервер редиректит этот запрос на сервер авторизации (СА),
4) СА отдает клиенту информацию-ключ для того что-бы можно было авторизоваться на любом нашем сервере.
5) Клиент посылает этот ключ нашему серверу, и сервер возвращает куку клиенту - клиент авторизирован.

в итоге получилось 2 (3) запроса от клиента,
Тут на самом деле проблема несколько в ином.
Есть одно приложение, которое отвечает за все домены.
Оно запускается один раз.
При запуске, оно инициализирует beaker с конкретным доменом ('.test.com'), чтобы активировать поддомены.
При обращении браузера к серверу, независимо от того, с какого домена идёт запрос, бикер вешает на браузер куку привязанную к домену .test.com
Это ключевой момент - из-за этого не работают все остальные домены.
Эта же проблема не даст сделать и кроссдоменный сеанс, поскольку сеансы на всех дополнительных доменах работать не будут.

Что можно сделать, чтобы объяснить бикеру, что нужно повесить куку не на test.com, а, скажем, на test2.net?
При этом тут же параллельные процессы отвечают ещё на кучу параллельных запросов c разными доменами, имена которых заранее неизвестны?
Создавать на каждый домен отдельный сервер приложений? Число их велико есть ))
В целом, это неразумно с точки зрения расхода ресурсов, поскольку один процесс/сервер может обслужить тысячи доменов, поскольку нагрузка на каждый из них мизерна.

Либо, возможно, нужна другая библиотека, если у этой нет такой возможности? Хотя всего-то нужен вызов одного метода типа setDomain(…) на получении воркером запроса.



Офлайн

#8 Авг. 15, 2011 23:05:31

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

>Эта же проблема не даст сделать и кроссдоменный сеанс, поскольку сеансы на всех дополнительных доменах работать не будут.
>Что можно сделать, чтобы объяснить бикеру, что нужно повесить куку не на test.com, а, скажем, на test2.net?

хз. я с брейкером не работал, можно там инициализацию перенести в приложение?
а вообще можно легко самодельные сессии сделать

Офлайн

#9 Авг. 15, 2011 23:12:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

o7412369815963
, можно там инициализацию перенести в приложение?
вот что-то типа такого, определили че за домен, после инициализируем сессии:
from beaker.middleware import SessionMiddleware
session_opts = {
'session.type': 'file',
'session.cookie_expires': 300,
'session.data_dir': './session_data',
'session.timeout': 3000,
'session.cookie_domain': '.test.com'
}
def temp_app(env, req):
pass
app = SessionMiddleware(temp_app, session_opts)
app(request.environ, request)

Отредактировано (Авг. 15, 2011 23:12:57)

Офлайн

#10 Авг. 17, 2011 12:18:52

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

beaker и несколько доменов.

Как то так и получилось.

application.options['session.cookie_domain'] = get_host()
Перед инициализацией опции присваивается значение функции которая знает имя домена.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version