В настоящее время я работаю над проектом, охватывающим несколько доменов. Я хочу, чтобы пользователь мог войти в систему на одном сайте и одновременно войти на все остальные.
Сеанс пользователя хранится в базе данных, файлы cookie, которые я установил для каждого домена, содержат идентификатор сеанса.
Итак, в основном, когда пользователь входит на example.com, создается файл cookie с его идентификатором сеанса, данные сеанса сохраняются в базе данных. Как только это будет сделано, на всех остальных доменах должен быть создан файл cookie с этим уникальным идентификатором сеанса, чтобы пользователь, перемещаясь с сайта на сайт, автоматически входил в систему.
Теперь я нашел способ сделать это в Firefox (используя теги изображений, которые запускают сценарии PHP в других доменах, по сути создавая разные файлы cookie в разных доменах), но этот метод не работает в IE (не тестировал Opera или Сафари и т.д. пока нет).
Есть ли у кого-нибудь идеи о том, как я могу заставить это работать в IE?






Не уверен, что это хорошее предложение на данном этапе вашей разработки, но вам обязательно стоит взглянуть на Единая точка входа, если вы хотите сделать это «правильным» способом.
Я сам этого не делал, но думаю, вы идете правильным путем. Я бы, наверное, сделал то же самое, только вместо изображения я бы использовал файл Javascript. Он будет сгенерирован на стороне сервера и обновит файлы cookie на стороне клиента.
Это только я, или это похоже на то, что ваш CSRF использует вашу технику с изображениями, которые работают в Firefox?
Интересный подход, хотя я надеюсь, что вы там не подвергаетесь угрозе безопасности.
Первоначально я так думал и фактически обнаружил, что это проблема. Однако после небольшого экспериментирования и т. д. Я думаю, что справился с этим.
Возможно, я был немного глуп, но не могли бы вы установить файлы 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);
Да, сначала попробовал, похоже, не сработало, так как я не думаю, что вы можете устанавливать файлы cookie для других доменов, только для домена, в котором вы находитесь. Я полагаю, это действительно имеет смысл, если задуматься.
Вам не разрешено устанавливать файлы cookie для других доменов.
Взгляните на мой вопрос Междоменное отслеживание пользователей.
Что вам нужно сделать, так это добавить еще один HTTP-заголовок к «изображению».
Цитата из Переменные сеанса теряются, если вы используете FRAMESET в Internet Explorer 6.:
You can add a P3P compact policy header to your child content, and you can declare that no malicious actions are performed with the data of the user. If Internet Explorer detects a satisfactory policy, then Internet Explorer permits the cookie to be set.
A simple compact policy that fulfills this criteria follows:
P3P: CP = "CAO PSA OUR"
This code sample shows that your site provides you access to your own contact information (CAO), that any analyzed data is only "pseudo-analyzed", which means that the data is connected to your online persona and not to your physical identity (PSA), and that your data is not supplied to any outside agencies for those agencies to use (OUR).
You can set this header if you use the Response.AddHeader method in an ASP page. In ASP.NET, you can use the Response.AppendHeader method. You can use the IIS Management Snap-In (inetmgr) to add to a static file.
Follow these steps to add this header to a static file:
- Click Start, click Run, and then type inetmgr.
- In the left navigation page, click the appropriate file or directory in your Web site to which you want to add the header, right-click the file, and then click Properties.
- Click the HTTP Headers tab.
- In the Custom HTTP Headers group box, click Add.
- Type P3P for the header name, and then for the compact policy string, type CP=..., where "..." is the appropriate code for your compact policy.
Это именно то, что я обнаружил, это была настройка среды по умолчанию в IE, которая блокировала его. Добавив код: заголовок ('P3P: CP = "IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); теперь все работает отлично: D
Да, это то, что я ищу, и мне удалось добиться этого с помощью Firefox, но он не работает с IE. Может, я просто ошибаюсь.