Quando um usuário requisita uma página de um site, o site pode retornar além da página, cookies que são armazenados localmente. Mais tarde, se o usuário requisita uma página do mesmo site novamente, o navegador irá enviar os cookies daquele site juntamente com a requisição.
Os cookies são associados a sites e não a páginas e usuários. Então a medida que os usuários navegam podem ser armazenados cookies de sites que diferentes uns dos outros.
Limitações de cookies
A maioria dos navegadores suportam cookies de até 4096 bytes. Por este pequeno limite, cookies são usados para armazenar pequenas quantidades de dados.
Pode haver também limitações de quantidade de cookies que um site pode armazenar, sendo que a maioria dos navegadores impõem um limite de 20 cookies por site. Alguns navegadores limitam a 300 cookies armazenados na máquina
Outra limitação é que o cliente pode desabilitar cookies
Escrevendo cookies
O ASP.NET escreve cookies na resposta de uma requisição, o navegador que é responsável pela persistência dos dados no cliente. Quando criado um cookie, deve ser especificado um nome e valor. Cada cookie deve ter um nome único, para que possa ser recuperado posteriormente. É possível informar uma data de expiração do cookie, lembrando que o usuário pode limpar os cookies antes da expiração definida pelo nosso código.
Controlando o escopo do cookie
Os cookies podem ter um escopo limitado para diretórios dentro do domínio, utilizando subdomínios do site.
Determinando se o navegador suporta cookie
Uma forma de descobrir se o navegador suporta cookie é enviar um cookie para o usuário e posteriormente tentar lê-lo.
Prática
Vamos agora montar um exemplo que irá armazenar o usuário e data do último login do usuário no site, quando ele marca uma opção para isto. Para isso, crie um novo Web site e na página default.aspx adicione os seguintes controles e defina suas propriedades como abaixo:
Label
ID: lbUsuario
Text : Usuário
TextBox
ID : txtUsuario
Button
ID: btnEnviar
Text: Enviar
Label
ID: lbUltimoLogin
Text : vazio
Feito isto a parte visual da página deverá estar parecido com a Imagem 1:

Programa o evento click do botão btnEnviar e o Page Load conforme o Código 1:
public partial class _Default : System.Web.UI.Page
{
private const string cookieID = "informacoesUsuario";
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies[cookieID] != null)
{
HttpCookie cookieInformacoesUsuario = Request.Cookies[cookieID];
txtUsuario.Text = cookieInformacoesUsuario["usuario"];
AdicionaInfoUltimaVisita(cookieInformacoesUsuario);
}
}
private void AdicionaInfoUltimaVisita(HttpCookie cookieInformacoesUsuario)
{
if (Request.Cookies[cookieID] != null)
{
lbUltimoLogin.Text = string.Format("Sua última visita foi em : {0}", cookieInformacoesUsuario.Values["ultimaVisita"]);
}
}
protected void btnEnviar_Click(object sender, EventArgs e)
{
HttpCookie cookieInformacoesUsuario = new HttpCookie(cookieID);
cookieInformacoesUsuario.Values["usuario"] = txtUsuario.Text;
cookieInformacoesUsuario.Values["ultimaVisita"] = DateTime.Now.ToString();
cookieInformacoesUsuario.Expires = DateTime.Now.AddDays(10);
Response.Cookies.Add(cookieInformacoesUsuario);
AdicionaInfoUltimaVisita(cookieInformacoesUsuario);
}
}
Código 1 – Programando o click do BtnEnviar e o PageLoad
Execute o site, digite o usuário e clique em enviar. Feche o navegador, abra outro navegador e visite o mesmo endereço e veja o cookie em ação.
Referências
http://msdn.microsoft.com/en-us/library/ms178194.aspx