2015-03-05 3 views
1

Использование MVC.Хранение ценности в HttpCookie

Function Login(ByVal token As String) As ActionResult 
     Using client As New WebClient 
      Try 
       Dim jsonResponse As String = client.DownloadString(URL & "/Getuser&token=" & token) 
       Dim obj As UserInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(Of UserInfo)(jsonResponse) 

       Response.Cookies.Add(New HttpCookie("token", token)) 
       Response.Cookies.Add(New HttpCookie("user_id", obj.id)) 

       Return Json(obj) 

      Catch ex As WebException 
       Return Content("ERROR") 

      Catch ex As Exception 
       Return Content("ERROR") 
      End Try 

     End Using 
    End Function 
  1. Я посылаю маркер этой функции.
  2. Затем, используя этот маркер, чтобы получить информацию пользователя из определенного API
  3. затем хранить этот маркер в HttpCookie

    Все это работает отлично в течение почти месяца, Пока он не перестал работать.

Когда я отлажена, token имел значение, и он хранил его в HttpCookie, но когда я позвонил Request.Cookies("token").Value вернулся ''

Любая помощь будет оценена.

Я сделал след на Токена ..

Я пишу параметр «маркер» в файл перед сохранением его в куки. тогда я пишу печенье Request.Cookies("token").Value в файл,

Function Login(ByVal token As String) As ActionResult 
    WriteToFile("TOKEN RECEIVED = ", token) 

    Using client As New WebClient 
     Try 
      Dim jsonResponse As String = client.DownloadString(URL & "/Getuser&token=" & token) 
      Dim obj As UserInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(Of UserInfo)(jsonResponse) 

      Response.Cookies.Add(New HttpCookie("token", token)) 
      Response.Cookies.Add(New HttpCookie("user_id", obj.id)) 
      WriteToFile("TOKEN COOKIE = ", Request.Cookies("token").Value) 
      Return Json(obj) 

     Catch ex As WebException 
      Return Content("ERROR") 

     Catch ex As Exception 
      Return Content("ERROR") 
     End Try 

    End Using 
End Function 

возвращает следующее:

TOKEN RECEIVED = X132WEeRT3AASDV 
TOKEN COOKIE = 

Когда я пытаюсь писать как запрос и ответ Кук:

WriteToFile("TOKEN COOKIE = ", Request.Cookies("token").Value) 
WriteToFile("TOKEN COOKIE = ", Response.Cookies("token").Value) 

Запрос .Куки («токен»). Значение Возвращает пустую строку

Ответ. Cookies («токен»). Значение Возвращает Фактическое значение

+0

Если вы используете инструмент отладки как Firebug и т.д. для Firefox , вы можете легко просмотреть, какие файлы cookie вы установили для домена и каков контент этого файла cookie. Это поможет вам определить, действительно ли файл cookie установлен правильно, и/или это неверное перечитание файла cookie. –

+1

@ AllanS.Hansen Спасибо, Это показывает, что cookie с user_id заполнен, хотя cookie с токеном пуст.Понятия не имею почему. – HelpASisterOut

+0

не могли бы вы отредактировать свое сообщение, чтобы показать нам, как и когда вы точно пишете файл cookie в файле – Bombinosh

ответ

1

Возможно, ваш файл cookie истекает через месяц? При использовании файлов cookie не забудьте указать дату истечения срока действия и проверьте настройки веб-браузера (например: если вы используете «пакет браузера tor», это может быть проблемой).

HttpCookie myCookie = new HttpCookie("UserSettings"); 
myCookie["Font"] = "Arial"; 
myCookie["Color"] = "Blue"; 
myCookie.Expires = DateTime.Now.AddDays(1d); 
Response.Cookies.Add(myCookie); 

https://msdn.microsoft.com/en-us/library/78c837bd%28v=vs.140%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

+0

Это была моя проблема. Я не устанавливал дату истечения срока действия при создании или удалении, поэтому файл cookie остался в браузере и вызвал конфликт. :) – HelpASisterOut

0

Убедитесь, что вы используете файлы cookie только во время фактического запроса Http. Возможно, вы изменили способ (или место, где) вы вызываете эту функцию.

+0

. Я делаю все, как указано выше. Серверная сторона Httpcookie до тех пор, пока не возвращает значение ''. – HelpASisterOut

0

Это старый вопрос о SO, но и для тех, кто заинтересован, команда .NET создал новый метод, чтобы правильно обрабатывать печенье.

Это доступно в .NET 4.7.1, а не более ранние версии:

См в разделе ASP.NET HttpCookie разборе здесь https://blogs.msdn.microsoft.com/dotnet/2017/09/13/net-framework-4-7-1-asp-net-and-configuration-features/

Смежные вопросы