Форум сайта python.su
Хочется чтоб бейкер регистрировал сессии с разных доменов например 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)
Офлайн
Если это одно приложение с несколькими доменами, то можно на сервере сделать реврайтинг урла: test1.com -> test.com, test555.com -> test.com.
Если разные приложения, то такой вариант: у каждого приложения свой обработчик сессий и сделать междоменную авторизацию, по принципу OpenID.
Офлайн
Офлайн
Офлайн
Междомменую авторизацию нужно делать через сохранение в базе а в бейкере насколько я понял есть только sql базы и мемкешед. Так что придется ченить свое для сессий написать.
Офлайн
Сейчас проверил редиректы в ajax, позволяет сделать 1 редирект.
В итоге можно сделать фоновую авторизацию:
1) Пользователь заходит на сайт,
2) если нашей куки нет, то клиент фоново ($.get/$.post) посылает запрос серверу,
3) сервер редиректит этот запрос на сервер авторизации (СА),
4) СА отдает клиенту информацию-ключ для того что-бы можно было авторизоваться на любом нашем сервере.
5) Клиент посылает этот ключ нашему серверу, и сервер возвращает куку клиенту - клиент авторизирован.
в итоге получилось 2 (3) запроса от клиента,
Офлайн
o7412369815963Тут на самом деле проблема несколько в ином.
Сейчас проверил редиректы в ajax, позволяет сделать 1 редирект.
В итоге можно сделать фоновую авторизацию:
1) Пользователь заходит на сайт,
2) если нашей куки нет, то клиент фоново ($.get/$.post) посылает запрос серверу,
3) сервер редиректит этот запрос на сервер авторизации (СА),
4) СА отдает клиенту информацию-ключ для того что-бы можно было авторизоваться на любом нашем сервере.
5) Клиент посылает этот ключ нашему серверу, и сервер возвращает куку клиенту - клиент авторизирован.
в итоге получилось 2 (3) запроса от клиента,
Офлайн
>Эта же проблема не даст сделать и кроссдоменный сеанс, поскольку сеансы на всех дополнительных доменах работать не будут.
>Что можно сделать, чтобы объяснить бикеру, что нужно повесить куку не на test.com, а, скажем, на test2.net?
хз. я с брейкером не работал, можно там инициализацию перенести в приложение?
а вообще можно легко самодельные сессии сделать
Офлайн
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)
Офлайн
Как то так и получилось.
application.options['session.cookie_domain'] = get_host()
Офлайн