Подтвердить что ты не робот

Какие типы данных могут храниться в файлах cookie?

Я изучаю ASP.net с помощью С#, и я хотел бы знать, можем ли мы хранить данные, отличные от строк, в файлах cookie, таких как дата/время или десятичная или двойная.

4b9b3361

Ответ 1

Данные любого типа, которые вы можете сериализовать в string и десериализовать обратно в этот тип, могут быть сохранены в файле cookie. Например: Object, DateTime, Int, Decimal и т.д.


Это полностью зависит от вашей логики кодирования; строка может быть преобразована обратно на что угодно почти,

  • Объект
  • Int
  • Decimal
  • DateTime
  • Ссылка на любую временную таблицу/значение u может храниться для гостевых пользователей

Можно ли получить объект из файла cookie?

Нет, не так, как вы пытаетесь. Не думайте с точки зрения ASP.NET. Подумайте о том, что на самом деле существует HTTP cookie. Это HTTP-заголовок. Заголовки HTTP - это только строковые значения. Понятие объекта не существует в протоколе HTTP.

Итак, вам нужно будет сериализовать объект .NET, который у вас есть, и затем десериализовать его.

В .NET существуют различные сериализаторы, которые вы могли бы использовать. Например, используйте BinaryFormatter, а затем Base64 encode полученный массив байтов для хранения в файл cookie.

десериализация - это обратный процесс - вы читаете значение из файла cookie (который всегда является строкой), затем вы Base64 decode it в массив байтов, который вы десериализуете обратно к исходному объекту с помощью BinaryFormatter.

Помните, что размер файлов cookie ограничен и может варьироваться в зависимости от разных браузеров. Поэтому не стоит ставить большие объекты в файлы cookie. Значение будет удалено, и вы получите поврежденные данные. Я бы не использовал их, если полное сериализованное значение объекта больше 2 тыс. Символов.

Обозначьте описанный выше процесс:

public class cookieTest
{
    testC test;
    public cookieTest()
    {
        test = new testC();
    }
    public testC GetTestC
    {
        get
        {
            var cookie = HttpContext.Current.Request.Cookies["test"];
            return Deserialize<testC>(cookie.Value);
        }
        set
        {
            var cookie = new HttpCookie("test");
            cookie.Expires = DateTime.Now.AddHours(8);
            cookie["first"] = Serialize(value);
            System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
        }
    }

    private static string Serialize<T>(T instance)
    {
        using (var stream = new MemoryStream())
        {
            var serializer = new BinaryFormatter();
            serializer.Serialize(stream, instance);
            return Convert.ToBase64String(stream.ToArray());
        }
    }

    private static T Deserialize<T>(string value)
    {
        using (var stream = new MemoryStream(Convert.FromBase64String(value)))
        {
            var serializer = new BinaryFormatter();
            return (T)serializer.Deserialize(stream);
        }
    }
}

Кредит и Справка

Ответ 2

Данные всегда сохраняются как тип String. Однако, поскольку именно вы сохранили данные, вы должны знать тип данных. Таким образом, при чтении данных вы можете использовать соответствующие функции преобразования, чтобы получить нужный тип данных.