Jak na permanentní/persistentní cookies v asp.net

Dneska to byl zase záhul, který jsem dokončil přesně ve 12h a začal jsem na něm dělat už včera. O co šlo? O nic většího než ukládání persistentních (permanentních) Cookies. Protože je to opravdu šílené, rozhodl jsem se to dát na blog, ať ostatní tyto hrůzy nezažívají také 😀 :

Pole args je libovolný počet hodnot, jejíž součet je sudý, příklad:

C#
string[] args = new string[] { "login", txtLogin.Text };

A teď jak to nefunguje.. třeba takto:

C#
for (int i = 0; i < args.Length; i++)
{
    string name = args[i];
    HttpCookie cookie = new HttpCookie(name, args[++i]);
    cookie.Expires = DateTime.Now.AddYears(1);
    Response.Cookies.Set(cookie);
}

Nefunguje to ani takto:

C#
for (int i = 0; i < args.Length; i++)
{
    string name = args[i];
    page.Response.Cookies[name].Name = args[i];
    page.Response.Cookies[name].Value = args[++i];
    page.Response.Cookies[name].Expires = DateTime.Now.AddYears(1);
}

Nezkoušejte to ani náhodou s hromadnými Cookie:

C#
//-Získám novou cookie nebo vezmu starou, bude li existovat
HttpCookie cookie = GetExistsOrNew(page);
//-Pokusil jsem se získat starou cookie novým způsobem
for (int i = 0; i<args.Length; i++)
{
    cookie.Values[args[i]] = args[++i];
}
//-Nastavení Expire jako hodnoty je zbytečné, i když jsem to na internetu u persistentních cookie viděla jako nutné
cookie.Values["Expire"] = "5 Days";
cookie.Expires.AddDays(5);
cookie.Domain = M.wa;
//-Je zbytečné nastavovat i vlastnost Cookie, tu musíte nastavit ale ne v hromadné cookie, nýbrž jednoduché
cookie.Value = "";
page.Response.Cookies.Add(cookie);

Zbývá jen napsat jak to teda funguje – jen takto:

C#
for (int i = 0; i < args.Length; i++)
{
    string name = args[i];
    Response.Cookies[name].Name = args[i];
    Response.Cookies[name].Value = args[++i];
    Response.Cookies[name].Expires = DateTime.Now.AddYears(1);
}

A ještě na konec jediný způsob jak cookie zrušit platnost:

C#
Response.Cookies["login"].Expires = DateTime.Now.AddYears(-1);

Takže zapomeňte na mazání tímto stylem:

C#
Response.Cookies.Remove(M.ja);

Ještě něco, to přidávání cookie musí být v kódu stránky nebo nějaké stránky ze které odvozuje. Přidávat cookie přes HttpContext.Current jsem nezkoušel.

Napsat komentář