Я ломаю голову, чтобы выяснить специфическую проблему браузера (в Firefox и Chrome). Я потратил так много времени, чтобы попытаться исправить эту проблему, и я наконец решил создать живую демонстрацию для экспертов, которые будут изучать эту проблему. (Надеюсь, это окупится)
У меня есть два домена www.nkmekal.com и www.incessantcoding.com
Пожалуйста, используйте Firefox / Chrome, чтобы повторить проблему:
Шаг 1:
Просмотр http://www.nkmekal.com/createcookie.aspx
Страница просто создает cookie. Ниже приведен код, который создает cookie:
// In On_Load of nkmekal.com/createCookie.aspx
HttpCookie cookie = new HttpCookie("DisCookie");
cookie.Value = "djdjd77676ydjdndgdidjkdnhf";
cookie.HttpOnly = true;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
lblCookieInfo.Text = string.Format("<b>Cookie Name:</b> {0} <br/><br/> <b>Cookie Value:</b> {1} <br/><br/> <b>Cookie Expires On:</b> {2}", cookie.Name, cookie.Value, cookie.Expires);
Шаг 2:
Теперь откройте новую вкладку в браузере, перейдите на http://www.incessantcoding.com/GoTonkmekal.aspx, который в основном выполняет простое перенаправление 302 на http://www.nkmekal.com/ReadCookie.aspx, ниже приведен код, который выполняет это перенаправление:
// In On_Load of incessantcoding.com/GoTonkmekal.aspx
protected void Page_Load(object sender, EventArgs e)
{
Response.Redirect("http://www.nkmekal.com/ReadCookie.aspx");
}
Однако я вижу следующее сообщение: (см. Код страницы ReadCookie.aspx на шаге 3)
«Cookie не найдены :(»
Это означает, что домен www.nkmekal.com не смог прочитать файл cookie, созданный ранее при просмотре www.nkmekal.com / createcookie.aspx
Шаг 3:
А страница http://www.nkmekal.com/ReadCookie.aspx просто пытается прочитать созданный выше файл cookie (на шаге 1) и отображает данные файла cookie. Ниже приведен код, который пытается прочитать cookie и отображает его на странице
// In On_Load of nkmekal/ReadCookie.aspx
HttpCookie cookie = Request.Cookies["DisCookie"];
if (cookie != null)
{
// Resetting expiry date because the browser never sends expiry date to Server,
// as cookies expiration dates are irrelevant to servers.
cookie.Expires = DateTime.Now.AddDays(1);
lblCookieInfo.Text = string.Format("<b>Yes! I found a cookie</b> <br><br><b>Cookie Name:</b> {0} <br/><br/> <b>Cookie Value:</b> {1} <br/><br/> <b>Cookie Expires On:</b> {2}", cookie.Name, cookie.Value, cookie.Expires);
}
else
{
lblCookieInfo.Text = "No Cookie Found :(";
}
Вышеуказанные шаги работают нормально только в IE, но не в FireFox / Chrome.
Кроме того, если вы хотите взглянуть на исходный код двух доменов, вы можете загрузить их по адресу
http://dl.dropbox.com/u/1248159/incessantcoding.zip
http://dl.dropbox.com/u/1248159/nkmekal.zip
Почему я пытаюсь это сделать:
Итак, причина, по которой я пытаюсь это сделать, заключается в том, что есть определенные операции, которые мне нужно выполнить в домене www.incessantcoding.com , если в www был создан файл cookie .nkmekal.com
И причина для переадресации 302 заключается в том, что мы не можем читать междоменные куки-файлы, и поэтому я пытаюсь прочитать куки-файлы только с соответствующего домена (поскольку nkmekal.com может только читать его куки).
Любая помощь / предложения будут очень полезны.
Обновление:
Также весьма интересно, что если шаги 1 и 3 выполняются (без шага 2), значение cookie правильно читается в Firefox и Chrome. Только 302 не работает.