В некоторых случаях .NET не может найти cookie, который я создал в классическом asp - PullRequest
2 голосов
/ 23 сентября 2008

Я единственный разработчик, поддерживающий веб-сайт, представляющий собой смесь классического ASP и .NET. Мне пришлось добавить несколько страниц .net в классическое приложение asp. Это приложение требует от пользователей входа в систему. Страница входа, написанная на классическом asp, создает файл cookie, который используются .net-страницами для идентификации вошедшего в систему пользователя, и сохраняет информацию в сеансных переменных для использования другими классическими страницами asp. В классическом ASP код cookie выглядит следующим образом:

response.cookies("foo")("value1") = value1
response.cookies("foo")("value2") = value2
response.cookies("foo").Expires = DateAdd("N", 15, Now())
response.cookies("foo").Path = "/"

В .NET-коде за кодом Page_Load я проверяю наличие cookie-файла, используя приведенный ниже код.

if (! IsPostBack) {
if (Request.Cookies ["foo"]! = null) { ...} else {// перенаправить на страницу создания cookie, cookiefoo.asp }}

Подавляющее большинство времени это работает без проблем. Однако у нас есть пользователи, которые перенаправляются на страницу создания файлов cookie, поскольку код Page_Load не может найти файл cookie. Независимо от того, сколько раз пользователь перенаправляется на страницу создания файлов cookie, ссылающаяся страница все равно может найти файл cookie, foo. Проблема возникает в IE7, и я попытался изменить настройки конфиденциальности и cookie в браузере, но, похоже, не могу воссоздать проблему, с которой сталкивается пользователь.

У кого-нибудь есть идеи, почему это может происходить с IE7?

Спасибо.

Ответы [ 6 ]

2 голосов
/ 23 сентября 2008

Использование Fiddler - это хороший способ выяснить, что происходит. Вы можете видеть точный Set-Cookie, который получает браузер.

1 голос
/ 25 мая 2010

Одна вещь, касающаяся файлов cookie, которые очень сложно отлаживать, заключается в том, что файлы cookie чувствительны к регистру, когда дело доходит до домена. Таким образом, файл cookie, созданный для «www.abc.com/dir1/alpha/», недоступен из кода, если пользователь ввел «www.abc.com/dir1/Alpha/".

Еще одна вещь, на которую стоит обратить внимание на страницах ASP.NET:

Page.Response.Redirect("~/alpha");

ASP.NET изменит регистр относительного URL на основе регистра фактического пути к файлу. Если в вашей структуре каталогов смешанные регистры, используйте

Page.Response.Redirect(Page.ResolveUrl("~/alpha").ToLower());
0 голосов
/ 27 сентября 2008

Я помню, что это происходило в похожем приложении, которое я написал; некоторые страницы были классическим ASP, а другие ASP.NET. Кажется, что cookie исчезают между .NET и классическими ASP-страницами.

IIRC, сторона .NET, необходимая для Server.HTMLEncode / HTMLДекодировать куки. Извините, но у меня нет точного кода, который я использовал, но это должно заставить вас двигаться в правильном направлении.

0 голосов
/ 25 сентября 2008

Код, который вы опубликовали, должен быть взломан, если в настройках конфиденциальности IE7 заблокированы файлы cookie первых лиц. Вы пробовали это в своих экспериментах?

Использование Fiddler в качестве Лу сказал, что это хорошая идея, хотя заголовок ответа Set-Cookie менее интересен, чем последующие заголовки запроса Cookie, чтобы увидеть, направляет ли клиент их на сервер.

0 голосов
/ 23 сентября 2008

Хорошо, второй ответ: если это действительно небольшая группа пользователей, вы можете посмотреть, какое программное обеспечение они установили на свой компьютер. На всех их компьютерах может быть обычное антишпионское / рекламное приложение, которое работает с вашими файлами cookie.

Если вы не можете получить ответы от этих пользователей на этот счет, или нет ничего подозрительного, возможно, стоит создать специальный небольшой тестовый сценарий, чтобы написать cookie и опубликовать результат обратно на следующей загрузке страницы.

Вы хотите сделать его максимально простым (без взаимодействия с пользователем после загрузки ссылки), поэтому сделайте это:

  1. Установить куки в классическом ASP
  2. Перенаправление на другую страницу ASP.
  3. Прочтите куки и отправьте их по электронной почте.
  4. Перенаправление на страницу ASPNET.
  5. Прочтите файл cookie и отправьте его по электронной почте.

Возможно, вы также захотите установить cookie в ASPNET и попробовать прочитать его обратно.

0 голосов
/ 23 сентября 2008

Общее правило кросс-платформенного тестирования файлов cookie: выведите на экран все файлы cookie, чтобы вы могли увидеть свои данные. Возможно, он не объясняет, почему это происходит, но должен сообщать вам, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...