Classe para Ler e Gravar Cookies - Asp.Net MVC 4 com C# (CSharp)

Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 14/05/2016

Cookies

Pequenos arquivos utilizados para gravar e recuperar informações na máquina do cliente.
Quantidade máxima de Cookies que se pode gravar na máquina do cliente 20.
Tamanho máximo de cada Cookie é de 4k.

Ao começar o projeto desta página me deparei com a necessidade de manipular Cookies e ao pesquisar para começar a desenvolver uma Classe que atendesse as minhas necessidades encontrei este código na internet, fiz alguns testes e tudo funcionou maravilhosamente, como em time que esta ganhando não se mexe, acabei por adota-la e estou usando a quase um ano sem alterar nada.

Obs: Está Classe não é de minha autoria, foi encontrada na internet e tomei a liberdade de testar e publicar aqui para nossos seguidores.

Como utilizar a Classe Cookies.

Não é preciso instanciar esta Classe, ela é uma Classe estática (static).
Para gravar um Cookie chamar Cookie.Set(Key, value) onde key é o nome do Cookie e value é uma string com o valor a ser guardado.
Para ler um Cookie chamar Cookie.Get(key) onde key é o nome do Cookie, retorna uma string com o valor armazenado.
Para verificar se um Cookie esta gravado no cliente chamar Cookie.Exists(key), retorna um boolean com true se encontrado e false senão foi encontrado.
Para apagar um Cookie especifico chamar Cookie.Delete(key), apaga o Cookie com a chave informada.
Para apagar todos os Cookies registrados sob o domínio de seu site chamar Cookie.DeleteAll().

O prazo de validade do Cookie esta definido por Default como 360 dias em GetCookieDuration() e é carregado em _cookieDuration logo no inicio da Classe, não senti a necessidade de mudar isto. Se for preciso alterar você pode fazer isto diretamente em GetCookieDuration() informando um novo valor Default ou criar um método adicional para gravar o Cookie onde pode se informar o valor desejado.

Vamos lá, crie um Classe em seu projeto na pasta Models com o nome de Cookies.cs copie o e cole o código abaixo.

/* 
 * Classe para Gravar e Ler  Cookies
 * 
 * Autor : Retirada da Internet.
 * 
 * Visite nossa página http://www.codigoexpresso.com.br
 *     
 * Chamadas da Classe 
 * 
 *     Gravar um Cookie    => Set(key, Valor)
 *     Recuperar um Cookie => Get(key)
 *               Retorna uma string com o Cookie gravado com a chave indicada.
 *     Verificar se um Cookie existe => Exists(key)
 *               Retorna True se existe e false não existe.
 *     Apagar Cookie       => Delete(key)
 *                Apaga o Cookie com a chave indicada.
 *                         => DeleteAll()
 *                Apaga todos.
 */
using System;
using System.Configuration;
using System.Web;

public static class Cookie
{
    private const string CookieSetting = "Cookie.Duration";
    private const string CookieIsHttp = "Cookie.IsHttp";
    private static HttpContext _context { get { return HttpContext.Current; } }
    private static int _cookieDuration { get; set; }
    private static bool _cookieIsHttp { get; set; }

    static Cookie()
    {
        _cookieDuration = GetCookieDuration();
        _cookieIsHttp = GetCookieType();
    }

    public static void Set(string key, string value)
    {
        var c = new HttpCookie(key)
        {
            Value = value,
            Expires = DateTime.Now.AddDays(_cookieDuration),
            HttpOnly = _cookieIsHttp
        };
        _context.Response.Cookies.Add(c);
    }

    public static string Get(string key)
    {
        var value = string.Empty;

        var c = _context.Request.Cookies[key];
        return c != null
                ? _context.Server.HtmlEncode(c.Value).Trim()
                : value;
    }

    public static bool Exists(string key)
    {
        return _context.Request.Cookies[key] != null;
    }

    public static void Delete(string key)
    {
        if (Exists(key))
        {
            var c = new HttpCookie(key) { Expires = DateTime.Now.AddDays(-1) };
            _context.Response.Cookies.Add(c);
        }
    }

    public static void DeleteAll()
    {
        for (int i = 0; i <= _context.Request.Cookies.Count - 1; i++)
        {
            if (_context.Request.Cookies[i] != null)
                Delete(_context.Request.Cookies[i].Name);
        }
    }

    private static int GetCookieDuration()
    {
        //default
        int duration = 360;
        var setting = ConfigurationManager.AppSettings[CookieSetting];

        if (!string.IsNullOrEmpty(setting))
            int.TryParse(setting, out duration);

        return duration;
    }

    private static bool GetCookieType()
    {
        //default
        var isHttp = true;
        var setting = ConfigurationManager.AppSettings[CookieIsHttp];

        if (!string.IsNullOrEmpty(setting))
            bool.TryParse(setting, out isHttp);

        return isHttp;
    }
}




Comentários

Antonio Azevedo (Administrador) em 20/01/2017 19:45:57
 

Felipe, quando peço para colocar na pasta Models é porque esta pasta normalmente será mapeada em tudo que vai fazer, o que deve fazer é mapear sua pasta onde esta usando, onde estão suas declarações de using no topo de seu codigo faça o mapeamento da pasta onde colocou seu código,,

Exemplo :

using seusistema.Domain;


Felipe Negro em 18/01/2017 16:41:27
 

Amigo, boa tarde. Criei a classe no Model da minha aplicação, na pasta Domain, e onde consta ConfigurationManager na classe está com erro "The name 'ConfigurationManager' does not exist in the current context". Como posso resolve-lo? Obrigado.