#.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;
}
}
}
Надеюсь, это вам поможет.