В настоящее время я работаю над проектом, охватывающим несколько доменов. Я хочу, чтобы пользователь мог входить в систему на одном сайте и одновременно регистрироваться на всех остальных.
Сеанс пользователей хранится в базе данных, куки, которые я установил для каждого домена, содержат идентификатор сеанса.
Таким образом, в основном, когда пользователь регистрируется в example.com, cookie создается с идентификатором сеанса, данные сеанса хранятся в базе данных. Как только это будет сделано, cookie необходимо создать во всех других доменах с помощью этого уникального идентификатора сеанса, чтобы при перемещении пользователя с сайта на сайт они автоматически вошли в систему.
Теперь я нашел способ сделать это в Firefox (используя теги изображений, которые выполняют PHP-скрипты на других доменах, по существу создавая разные куки-файлы в разных доменах), но этот метод не работает в IE (не проверена Opera или Opera Safari и т. Д.).
Кто-нибудь есть идеи о том, как я могу заставить это работать в IE?
Посмотрите на мой вопрос « Отслеживание пользователей домена» .
Что вам нужно сделать, так это добавить еще один HTTP-заголовок в «образ».
Цитата из переменных сеанса теряется, если вы используете FRAMESET в Internet Explorer 6 :
Вы можете добавить заголовок политики P3P compact к вашему дочернему контенту, и вы можете заявить, что никакие вредоносные действия не выполняются с данными пользователя. Если Internet Explorer обнаруживает удовлетворительную политику, Internet Explorer позволяет настроить cookie.
Ниже приведена простая компактная политика, которая соответствует этим критериям:
P3P: CP = "CAO PSA OUR"
Этот пример кода показывает, что ваш сайт предоставляет вам доступ к вашей собственной контактной информации (CAO), что любые анализируемые данные только «псевдоанализируются», а это означает, что данные подключены к вашей онлайн-персоне, а не к вашей физической идентичности (PSA ), и что ваши данные не предоставляются никаким внешним агентствам для использования этими агентствами (OUR).
Вы можете установить этот заголовок, если вы используете метод Response.AddHeader на странице ASP. В ASP.NET вы можете использовать метод Response.AppendHeader. Вы можете использовать оснастку управления IIS (inetmgr) для добавления к статическому файлу.
Выполните следующие шаги, чтобы добавить этот заголовок в статический файл:
- Нажмите кнопку Пуск, выберите пункт Выполнить, а затем введите inetmgr.
- На левой странице навигации щелкните соответствующий файл или каталог на своем веб-сайте, на который вы хотите добавить заголовок, щелкните файл правой кнопкой мыши и выберите «Свойства».
- Перейдите на вкладку «Заголовки HTTP».
- В поле «Пользовательские заголовки HTTP-заголовков» нажмите «Добавить».
- Введите P3P для имени заголовка, а затем для строки компактной политики введите CP = …, где «…» – это соответствующий код для вашей компактной политики.
Не уверен, что это хорошее предложение на данном этапе вашего развития, но вам обязательно нужно взглянуть на Single Sign-on, если вы хотите сделать это «правильным» способом.
Это только я, или это звучит как ваш CSRFing себя с вашей техникой, используя изображения, которые работают в Firefox?
Интересный подход, хотя я надеюсь, что вы не открываете себе угрозу безопасности.
Я сам этого не делал, но думаю, что вы пойдете правильно. Я бы, вероятно, сделал то же самое, но вместо изображения я использовал бы файл Javascript. Он будет создан на стороне сервера и будет обновлять файлы cookie на стороне клиента.
Возможно, я немного глуп, но не могли ли вы установить cookie для каждого имени домена при входе в систему? Таким образом, вместо того, чтобы иметь один файл cookie, когда они заходят на сайт A, у них есть пять или несколько сайтов, которые у вас есть?
setcookie(A, $sessid, expire, path, domainA.com); setcookie(B, $sessid, expire, path, domainB.com); setcookie(C, $sessid, expire, path, domainC.com); setcookie(D, $sessid, expire, path, domainD.com);