значения cookie исчезают при переходе между страницами контента - PullRequest
3 голосов
/ 22 сентября 2011

в моем приложении. есть механизм входа в систему, который сохраняет куки с информацией о пользователе, который только что вошел в систему

     private void CreateCookie(LoginEventArgs args)
     {
         HttpCookie cookie = new HttpCookie("user");
         cookie.Values["name"] = args.User_Name;
         cookie.Values["id"] = args.ID;
         cookie.Expires = DateTime.Now.AddDays(1);            
         Response.Cookies.Add(cookie);
     }

На моей главной странице загрузки я проверяю, существует ли этот файл cookie:

   HttpCookie cookie = Request.Cookies["user"] ;
   if( (cookie != null) && (cookie.Value != ""))  
   {
        if (Session["user"] == null)
            Login_Passed(this, new LoginEventArgs(cookie.Values["name"].ToString(), int.Parse(cookie.Values["id"])));
   }

сейчас, если я вхожу в систему (создаю куки), закрываю браузер и запускаю мое приложение. опять печенье существует, его значения верны, и пользователь «автоматически» вошел в систему.

если я впервые перенаправлю на другую страницу контента со страницы запуска контента значения куки также не повреждены,

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

есть идеи, почему это происходит?

Кстати, возможно, причиной этой проблемы может быть выход из системы:

при выходе из системы я создаю cookie с тем же именем, срок действия которого истекает 1 день назад.

   private void Remove_Cookie()
   {
        HttpCookie cookie = new HttpCookie("user");
        cookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(cookie); 
   }

в случае, описанном мной, я формально не выхожу из системы, я просто заканчиваю свое приложение, так что это не должно иметь какой-либо эффект.

Ответы [ 3 ]

16 голосов
/ 24 сентября 2011

хорошо, проблема была немыслима
Особая благодарность Питеру Бромбергу

http://www.eggheadcafe.com/tutorials/aspnet/198ce250-59da-4388-89e5-fce33d725aa7/aspnet-cookies-faq.aspx

в разделе статьи "Исчезающее печенье"

автор заявляет, что если у вас есть часы на Response.Cookies ["cookie_name"] браузер создает новый пустой файл cookie, который переопределяет ваш файл cookie.

Я использовал такие часы, которые позволили моему cookie потерять свои значения, а когда я снял его, куки сохранили свои значения.

Мораль - это НЕ СМОТРЕТЬ Ответ. Печенье [""] Также я прочитал в другом посте, что если вы проверите

 if( Response.Cookies["cookie_name"] != null    )  

например, он также переопределяется.

7 голосов
/ 22 декабря 2015

Чтобы повторить и развить то, что уже было сказано (да, я знаю, что это 4-летний вопрос), я считаю, что лучше всего создать утилиту для этого - в основном потому, что я хочу часто проверять этот конкретный cookie.

Это не затронет ответ, а только прочитает из запроса.

    public static HttpCookie GetCookie(string cookieName)
    {
        HttpCookie rqstCookie = HttpContext.Current.Request.Cookies.Get(cookieName);
        /*** NOTE: it will not be on the Response!
         *   this will trigger the error noted in the original question and
         *   create a new, empty cookie which overrides it
         *   
            HttpCookie respCookie = HttpContext.Current.Response.Cookies.Get(cookieName);
         * 
         */
        if (rqstCookie != null && !String.IsNullOrEmpty(rqstCookie.Value))
        {
            // is found on the Request
            return rqstCookie;
        }
        else
        {
            return null;
        }
    }

эмпирическое правило

Всегда читайте из запроса и пишите вОтвет.

Спасибо, Эран!этот пост был именно то, что мне нужно

0 голосов
/ 22 сентября 2011

попробуйте следующее:

  • Если вы разрабатываете на своем локальном компьютере, поместите свое приложение на какую-то бесплатную веб-страницу, чтобы не было «особого режима», потому что вы находитесь на местномhost.
  • Если вы уже находитесь на веб-сервере и если вы перенаправляете между двумя доменами, вы можете поискать в Google «одинаковую политику происхождения» или прочитать это: http://en.wikipedia.org/wiki/Same_origin_policy (в документе говорится о javascript, но это верно и для файлов cookie).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...