Найти - Пользователи
Полная версия: beaker и несколько доменов.
Начало » Web » beaker и несколько доменов.
1
alexandre
Хочется чтоб бейкер регистрировал сессии с разных доменов например 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)
Может как то можно задавать опции динамически?
o7412369815963
Если это одно приложение с несколькими доменами, то можно на сервере сделать реврайтинг урла: test1.com -> test.com, test555.com -> test.com.
Если разные приложения, то такой вариант: у каждого приложения свой обработчик сессий и сделать междоменную авторизацию, по принципу OpenID.
alexandre
Это одно приложение которое отдает контент в зависимости от домена. И оно должно различать домены. Проблема в том что прописать сессии получается тока на test.com и все его поддомены, а на скажем test1.com уже не сохраняются куки.
o7412369815963
alexandre
Это одно приложение которое отдает контент в зависимости от домена. И оно должно различать домены. Проблема в том что прописать сессии получается тока на test.com и все его поддомены, а на скажем test1.com уже не сохраняются куки.
Тогда междомменую авторизацию.
alexandre
Междомменую авторизацию нужно делать через сохранение в базе а в бейкере насколько я понял есть только sql базы и мемкешед. Так что придется ченить свое для сессий написать.
o7412369815963
Сейчас проверил редиректы в ajax, позволяет сделать 1 редирект.
В итоге можно сделать фоновую авторизацию:
1) Пользователь заходит на сайт,
2) если нашей куки нет, то клиент фоново ($.get/$.post) посылает запрос серверу,
3) сервер редиректит этот запрос на сервер авторизации (СА),
4) СА отдает клиенту информацию-ключ для того что-бы можно было авторизоваться на любом нашем сервере.
5) Клиент посылает этот ключ нашему серверу, и сервер возвращает куку клиенту - клиент авторизирован.

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

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

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

Либо, возможно, нужна другая библиотека, если у этой нет такой возможности? Хотя всего-то нужен вызов одного метода типа setDomain(…) на получении воркером запроса.
o7412369815963
>Эта же проблема не даст сделать и кроссдоменный сеанс, поскольку сеансы на всех дополнительных доменах работать не будут.
>Что можно сделать, чтобы объяснить бикеру, что нужно повесить куку не на test.com, а, скажем, на test2.net?

хз. я с брейкером не работал, можно там инициализацию перенести в приложение?
а вообще можно легко самодельные сессии сделать
o7412369815963
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)
alexandre
Как то так и получилось.
application.options['session.cookie_domain'] = get_host()
Перед инициализацией опции присваивается значение функции которая знает имя домена.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB