Междоменная работа с файлами cookie кажется простой проблемой, поскольку вам нужно указать только атрибут «Домен» в качестве имени корневого домена указанного веб-сайта.
Однако
во время фактического использования автор столкнулся с некоторыми проблемами, на которые действительно стоит обратить внимание.
Файл cookie в главном доменном имени www. Создайте его и запишите атрибут «Домен», например: (Для удобства отладки все следующие коды являются кодами asp)
Код:
Write.asp
<%
Response.Cookies(CookieName)("ИмяПользователя") = "SunBird"
Response.Cookies(CookieName)("Пароль") = "xyz1234"
Response.Cookies(CookieName).Домен = "xxxx.com"
%>
код
Read.aspдля чтения файлов cookie размещается в том же каталоге
:Read.asp
<%
Ответ.Запрос на запись.Cookies(CookieName)("Имя пользователя")
Ответ.Запрос на запись.Cookies(CookieName)("Пароль")
%>
Затем поместите файл Read.asp на другой сайт поддомена с тем же кодом, что и выше.
Наконец, мы создаем еще один файл Clear.asp для очистки файлов cookie и размещаем его под основным доменным именем.
Код:
Clear.asp
<%.
Response.Cookies(CookieName)("ИмяПользователя") = ""
Response.Cookies(CookieName)("Пароль") = ""
Response.Cookies(CookieName).Домен = "xxxx.com"
%>
Теперь вы можете протестировать его с помощью следующей последовательности выполнения: Write.asp -> Read.asp имени основного домена -> Read.asp имени субдомена. Все страницы Read.asp могут считывать значение файла cookie, созданного пользователем. Напишите.asp, а затем снова запустите Clear.asp, чтобы очистить его, все в порядке, и вроде бы проблем нет.
Но при применении этого метода к реальным сайтам возникают проблемы.
Описание проблемы:
При первом входе в систему все в порядке. Все имена субдоменов имеют доступ к файлам cookie, хранящимся в имени основного домена. Однако после выхода из системы файлы cookie имен субдоменов удаляются, а файлы cookie основного доменного имени остаются. все еще сохраняются. После принудительного удаления файлов cookie основного доменного имени, независимо от того, как вы входите в систему основного доменного имени, файлы cookie не могут быть сохранены, если вы не закроете браузер и не откроете его снова.
После многих попыток я случайно обнаружил проблему. Ниже приводится процесс тестирования.
Создайте страницу Write2.asp и поместите ее под основным доменным именем.
<%
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
%>
Шаг 1. После закрытия браузера выполните следующие действия: Write.asp -> Read.asp основного имени домена -> Read.asp имени субдомена. Здесь все файлы Read.asp читаются нормально.
Шаг 2: Clear.asp --> Read.asp основного доменного имени --> Read.asp имени субдомена. Здесь операция очистки прошла успешно.
Шаг 3: Write.asp --> Write2.asp --> Имя основного домена Read.asp --> Имя поддомена Read.asp На этом этапе оба файла Read.asp могут считывать значение файла cookie.
Шаг 4. Повторно выполните шаг 2 и обнаружите, что основное доменное имя Read.asp по-прежнему выводит значение, а значение Read.asp под именем субдомена было удалено.
На основе приведенного выше теста мы резюмируем следующие моменты, на которые необходимо обратить внимание при использовании файлов cookie в разных доменах:
1. Если у вас есть группа файлов cookie (или словарь файлов cookie) и вы используете атрибут «Домен» для указания имени домена, когда вы изменить или добавить новых участников в группу. При добавлении обязательно добавьте атрибут Resonse.Cookies(CookieName).Domain после операции.
2. Если в этом нет необходимости, не изменяйте группу файлов cookie, для которой был установлен домен, а напрямую используйте Response.Cookies("CookieText") = CookieValue для создания нового файла cookie.