Programiranje

Piškotki v JavaScript

Danes, ko sem delal na projetni nalogi za maturo, sem prišel do problema s piškotki (cookies), katere ustvarjam s pomočjo JavaScript. Pri nalogi uporabljam piškotek Template v katerega shranim ime dizajna kateri naj bo prikazan. In vse je delovalo dokler je bil naslov strani v eni mapi, s tem mislim:

  • www.domena.com
  • www.domena.com/news
  • www.domena.com/cotact

Danes ko pa sem svoje skripte pisal dalje in začel uporabljati podmape kot so:

  • www.domena.com/news/test1
  • www.domena.com/profile/edit

In tukaj sem naletel na težavo, tako da če imate podobn problem poznam rešitev :)

Na začetku sem imel za ustvarjanje piškotka takšno funkcijo:

[js] function IzberiTemplate($name)
{
document.cookie = "Template=" + $name;
setTimeout("location.reload(true);",0);
}[/js]

Stvar je super delovala dokler ni podmap. Ker sem bolj vešč PHP kode kot JS mi seveda sploh ni bilo jasno kaj bi bilo narobe.

PHP piškotek se ustvari takole:

[php toolbar=”false”]setcookie(ime_piškotka, vrednost[,cas[,pot[,domena]]])[/php]

In pri PHPju, če poti ne vmesemo avtomatsko pot nadomesti z “/” kar pomeni da je piškotek dostopen tudi v vseh podmapah. JS pa tega ne naredi, tako da piškotek kot je ustvarjen zgoraj ne deluje v podmapah in je to potrebno vpisati ročno. Sedaj moja funkcija izgleda takole:

[js]function IzberiTemplate($name)
{
document.cookie = "Template=" + $name +"; path=/";
setTimeout("location.reload(true);",0);
}[/js]

Dodal sem path=/, to kar PHP naredi že sam. Sedaj stvar deluje tudi v podmapah. Bodite pozorni na to, če naredite takšno napako kot jaz in jo popravite, ko testirate pobrišite piškotke v brskalniku, ker jaz sem imel narejeno prav, pa sem mislim da še vedno nimam ter sem še pou ure zapravil za to, da sem se spomnil da je treba pobrisati stare piškotke v brskalniku :)

2 comments

Oddaj komentar...