Чтение файлов cookie https

#.net #asp.net-mvc #cookies #https

#.net #asp.net-mvc #файлы cookie #https

Вопрос:

Я собираю данные и использую POST-запрос для установки файлов cookie на сервере следующим образом:

  HttpCookie cookies = new HttpCookie(name) { 
     Value = value, 
     Expires = DateTime.MaxValue, 
     Secure = true };
 HttpContext.Current.Response.Cookies.Remove(name);
 HttpContext.Current.Response.Cookies.Add(cookies);
  

После завершения запроса POST я перезагружаю страницу с помощью js.
Я использую некоторые значения из файла cookie для этой страницы.

Я пытаюсь получить их как:

 if (HttpContext.Current.Request.Cookies[NameCookieName] != null)
{
     name = HttpContext.Current.Request.Cookies[NameCookieName].Value;
}
if (HttpContext.Current.Request.Cookies[RegionCookieName] != null)
{
     region = HttpContext.Current.Request.Cookies[RegionCookieName].Value;
}
  

Если я использую HTTP, он работает нормально.

Когда я использую установленные файлы cookie HTTPS, но когда я их читаю, значение cookokie равно NULL.

Как я могу установить / получить файл cookie с помощью HTTPS?

Ответ №1:

Я думаю, вам нужно использовать защищенное свойство. В C # в классе HttpCookie есть защищенное свойство, которое позволяет вам получать и устанавливать файлы cookie через HTTPS / SSL. Я полагаю, вам нужно будет настроить условия для установки и получения файлов cookie через эти страницы HTTPS, а также HTTP.

Файлы cookie, установленные через HTTPS, должны работать только через HTTP, поэтому, возможно, просто создайте файл cookie с помощью Secure. Похоже, поскольку это значение не установлено, файл cookie устанавливается только на HTTP-страницах по умолчанию.

Вы можете обратиться к приведенному ниже коду:

 protected void Application_EndRequest(Object sender, EventArgs e)
    {
        string authCookie = FormsAuthentication.FormsCookieName;

        foreach (string sCookie in Response.Cookies)
        {
            if (sCookie.Equals(authCookie))
            {
                // Set the cookie to be secure. Browsers will send the cookie
                // only to pages requested with https
                var httpCookie = Response.Cookies[sCookie];
                if (httpCookie != null) httpCookie.Secure = true;
            }
        }
    }
  

Надеюсь, это вам поможет.