ugrás a tartalomhoz

Cookie-kezelés jqueryvel

Creative · 2012. Május. 21. (H), 11.47
Üdv.

Egy viszonylag egyszerű akadályba ütköztem, ám mégse tudok továbblépni rajta...
Adva vagyon egy oldal, melyen lista-szerűen linkek helyezkednek el, s ezekre kattintva cookie-t hozna létre jQuery segítségével az oldal. Működésileg úgy történik, hogy a kattintott elem ID attribútumát (ez a kattintott oldal url s title párosa) tömbösítem, majd cookie-t generálok belőle.
Továbbá: Lekérem a kattintott oldalak, tehát a létrejött cookiek információit, de abból egyszerre csak 7 darabot (ugye elvileg 20 cookie/domain amit képes a rendszer használni), s ezt egy divbe iratom. Elévülési idő alapból 1 nap.

A probléma ott jelentkezik, hogy a kódom minden kattintáskor létrehozza a kívánt nevű (pagetitle) cookiet a megfelelő url-el mint érték, ám nem tudom lekérdezni, milyen cookiek léteznek már erre a domainre, vagy pathre. PHP-ban tudom hogy csinálnám, mert ott egy sima isset is megfelel név alapján, maximum lekérem az összes session elemem, de jQueryvel hogyan lehet megoldani a fenti problémám?

Íme a kattintásra lefutó scriptem:
            var datas = $(this).attr("id");
            var cookieInfos = new Array();
            cookieInfos = datas.split(':');
            var sessName = cookieInfos[1];
            var sessLink = cookieInfos[0];
            console.log(sessName + ' : ' + sessLink);
            setCookie(sessName, sessLink, 1);
Ez pedig maga a setCookie függvényem:
function setCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    var path = "; path=" + value;
    document.cookie = name + "=" + value + expires;
}
Van getCookie is, de az csak név alapján képes visszaadni a létrehozott cookie értékét, s itt ugye az lenne a lényeg, hogy a pontos megnevezés tudta nélkül is letudjunk kérni x-darabot, annak minden információjával.

C.
 
1

document.cookie

Poetro · 2012. Május. 21. (H), 11.59
A document.cookie változó tartalmazza az összes sütit. Csak fel kell darabolni ; mentén.
3

Valóban

Creative · 2012. Május. 21. (H), 16.52
Belekavarodtam már kissé, hogy átlássam. Tehát létrehozom a sütit, amit eltárol a document.cookie változó. Ezt splittelem s az így született tömbben leellenőrzöm, szerepel-e már az adott rekord -ami csak biztos ami biztos, nehogy egy névvel s más értékkel is szerepeljen-, s ha igen, a korábbit törlöm, az újat pedig berakom a helyére. Ez kiíratásnál már egyszerűbb sokkal, mert csak lekérem őket és sorba kirakom mint egy lista + firebug is sokszor hatásos.
Még annyi lenne akkor az idevágó kérdésem, hogy a unique-al megéri berendezni a cookiekat a tömbön belül -ehhez value-mezőben kap egy url és egy timestamp értéket is így timestamp alapján lehet-, vagy esetleg minden új cookie bekerülésénél unshiftel rakjam a tömböm elejére? A lényege ennek ugye annyi, hogy habár egy cookie már regisztrálva van egy name-value párral, ha újra klikkelek, újraregisztrálja, előzőt felülírva, de így a timestamp is látszik hogy más. Tehát ha én kattintok link1 -re, majd pedig link2 -re, s utána ismét a link1 -re, akkor szeretném hogy láthatólag is link1 a tömböm 0-ik helyén álljon, s link2 tolódjon az 1. helyre. A döntő kérdés ehhez viszont az, hogy melyik a jobban szeretett megoldás, melyik gyorsabb, melyik éri meg magyarul a használatot?

Kiegészítés:
Vagy még ami eszembe jutott, ha csak simán beillesztem első helyre mindenféle okosság nélkül:
TÖMB.splice(0,0,"ÚJ COOKIE");
C.
2

Nem igazán állt össze a kép,

kuka · 2012. Május. 21. (H), 12.09
Nem igazán állt össze a kép, hogy mi is a célod ezzel, de 2 ötlet volna az esetleges egyszerűsítésre/könnyítésre:
  • Ha nem túl hosszú az érték, használj egyetlen sütit és az értékét JSON.stringify()-al hozd össze a 7 külön sütibe szánt értékből.
  • Ha nincs rá szükség szerver oldalon, használj localStorage-ot.
4

Nem tudod visszaolvasni egy

tgr · 2012. Május. 21. (H), 19.22
Nem tudod visszaolvasni egy süti tulajdonságait se böngészőben, se szerveroldalon, csak az értékét. Ha nagyon nagy szükséged van rájuk, bele kell kódolnod őket az értékbe vagy egy kiegészítő sütibe.
5

De ha....

Creative · 2012. Május. 22. (K), 09.07
Mégis szeretném, hogy normálisan, klikkelésenként rendezve használja a sütiket az oldal, akkor hogy járnátok el a helyemben? CSAK jQuery használat jöhet szóba.

C.
6

süti

Poetro · 2012. Május. 22. (K), 09.46
Mivel a sütinek csak egyetlen publikus információja van, az értéke, ezért ha más adatot is akarsz benne tárolni, akkor azt az értékben kell tárolni.

CSAK jQuery használat jöhet szóba.

Ezt nem teljesen értem. A jQuery csak JavaScript, nem valami mágia.
7

Igen, jelenleg is így képezem

Creative · 2012. Május. 22. (K), 10.10
Igen, jelenleg is így képezem le:
setCookie(sessName, sessLink + '=' + dateNow, 1);
így név alapján is látom, s a benne lévő értéket darabolom, hogy megkapjam az url-t és a time-ot is, amikor létrehoztam. Ez minden kattintásnál frissül, viszont a tömbből, amivé alakítom a stringem, ott nem tudom ezt kiszedni s új dátumnál a tömb elejére rakatni :s
A csak jQuery -t arra értettem, hogy régebben volt hogy PHP-vel kombóztam, de ez most nem járható ösvény.
8

viszont a tömbből, amivé

Poetro · 2012. Május. 22. (K), 10.18
viszont a tömbből, amivé alakítom a stringem, ott nem tudom ezt kiszedni s új dátumnál a tömb elejére rakatni

Ez nagyon zavaros. Milyen tömbről van szó, és mit nem tudsz a tömb elejére rakni? Minden tömbnek létezik unshift metódusa, amivel a tömb elejére lehet pakolni elemeket. De miért kell a tömb elején lennie? És miért nem tudsz egy elemet kiszedni a tömbből? Arra való a splice metódusa a tömböknek. A kereséshez meg egyszerűen végigiterálsz a tömbön egy for / while ciklussal.
9

Done

Creative · 2012. Május. 24. (Cs), 13.11
Szóval...
Sikerült végülis megoldani, teljesen más megközelítéssel. A lényeg, hogy én balga a ténylegesen tárolt sütiket akartam erőszakolni, holott oda maximum valuet adok meg, s egy állandóan változó tömbben pedig lekezelem az aktuálisan létező sütiket. Így már működik a sorbarendezés is tömbön belül, illetve nincs állandóan létrejövő számtalan új süti, így kiküszöbölve néhány biztonsági problémalehetőséget is. viszont egy dolog még így is megakad a rostán, hogy hogy lehet az, hogy mikor megkapom az adatokat, elmentésre már az őűí karakterek helyén fura karakterek látszanak? Pl. ű=q, ő=Q, stb. Minden fájl utf8 bom -ba van mentve, az adatok feldolgozása során se módosítom a kódolásukat. A különleges karakterekkel nincs bajom.

C.