Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: setcookie niszczy sesje?
Forum PHP.pl > Forum > PHP
walker
Witam,
musze przekazać dosyć dużą ilość danych do javascriptu i tam ją obsłużyć. Robie to za pomocą ciastek. Dane to informacje o pliku ustawiane na zasadzie

Kod
while( nie_ostatni_plik ) {
    setcookie( "plik_info1_$nazwaPliku", $info1);
    setcookie( "plik_info2_$nazwaPliku", $info2);
    setcookie( "plik_info3_$nazwaPliku", $info2);
}


Potem odczytuje to sobie w javascripcie za pomocą

Kod
function getCookie(NameOfCookie)
{
    if (document.cookie.length > 0) {
 begin = document.cookie.indexOf(NameOfCookie+"=");
 if (begin != -1) {
     begin += NameOfCookie.length+1;
     end = document.cookie.indexOf(";", begin);
     if (end == -1) end = document.cookie.length;
     return unescape(document.cookie.substring(begin, end)); }
 }
    return null;
}

var ciastko = getCookie( plik_info1_'+ fname ); // fname zawiera nazwe danego pliku


Problem z tym że jak kliknę potem na jakiś link to mnie wylogowuje z mojego systemu!? (tzn z cms'a w którym to przetwarzenie się odbywa).. tak jakby niszczone zostało ciastko sesji blink.gif

Jeśli poprwię pierwszy kod na

Kod
while( są_nie_ostatni_plik ) {
    setcookie( "plik_info1", $info1);
    setcookie( "plik_info2", $info2);
    setcookie( "plik_info3", $info2);
}


To jest ok... z tym że moge przekazać informacje tylko o 1 pliku, a ich jest więcej i to nieokreślona z góry ilość..

Jakieś pomysły dlaczego to zabija moje ciastko sesyjne... albo może przekazać te dane w inny sposób......


PS. na początku miałem bardziej elegancki zapis typu:
setcookie( "igimg[$nazwaPliku][info1]", $info1);
ale też wylogowywało, wiec pomyslalem ze to moze kwestia tych "dziwnych" tablic.. ale nie
dr_bonzo
A nie mozesz za pomoca php wygenerowac kodu javascript? Zmiescisz wiecej niz w ciastkach
walker
Nie mogę ponieważ potem użytkownik ingeruje w stronę - za pomoca kliknięć wyświetla te informacje z ciastek tzn klika na plik 1 i wyświetla informacje o pliku 1 (z ciastek), klika na plik2 i wyświetla informacje o pliku2 (również z ciastek). A cały dowcip tkwi w tym, żeby strony nie przeładowywać -> żeby nie odpytywać bazy danych ani grzebac po dysku bo to newralgiczny punkt systemu (ten przypdadek jest dosyć specyficzny - po prostu nie mogę przeładować strony i tyle (normalnie wchodzilaby w gre sesja, ale tak czy siak rozwiazanie ktore tutaj proponuje jest bardziej optymalne, bo obsluga spada na kienta a nie serwer) ....

ale już mniej więcej wiem o co chodzi (raczej mniej niz wiecej ale na razie starczy;)_ a raczej jak to obejść.. więc dla zainteresowanych podaje moje spostrzerzenia i sposób wyjścia z systuacji:

Spostrzeżenie: po odświeżeniu strony ciastko sesyjne pojawiało się, ale tylko jesli kliknąłem odśwież dokładnie po załadowaniu strony tzn.. jesli kliknąłem jakiś link to mnie wylogowywało bo ciastko ginęło.. ale gdy dałem Odśwież od razu to ciastko się pojawiało i oczywiśnie mogłem klikać już swobodnie na inne linki..

Pytanie: czy możliwe żeby przeglądarka ustwiała ciastko sesyjne po wykonaniu kodu strony (tzn. najpier wyświetla HTML'a a potem ładuje ciastka??).. raczej nie bo to ciastko już było ustawione wczesniej.. w takim raize co się z nim dzieje?? "znika".. by po natychmiastowym klinknięciu odśwież pojawic się na nowo... hmm..

w każdym razie zastosowałem nastepujące rozwiązanie:

tuz po kodzie:
while( nie_ostatni_plik ) {
setcookie( "plik_info1_$nazwaPliku", $info1);
setcookie( "plik_info2_$nazwaPliku", $info2);
setcookie( "plik_info3_$nazwaPliku", $info2);
}
dodałem linijkę:
setcookie( "PHPSESSID", session_id() );

symulująć ciastko sesyjne i to ciastko zostało ustawione poprawnie od razu (podobie jak ciastka z informacjami o plikach) i potraktowane jako sesyjne (no bo czemuby nie...) i wszystko działa poprawnie...

---------------- tu ciąć winksmiley.jpg -----------------------------
Co ciekawe jeśli zrobię coś takiego:
while( nie_ostatni_plik ) {
setcookie( "plik_info1_$nazwaPliku", $info1);
setcookie( "plik_info2_$nazwaPliku", $info2);
setcookie( "plik_info3_$nazwaPliku", $info2);
}
setcookie( "PHPSESSID_", session_id() ); // <--- uwaga na kreseczke po PHPSESID <- (nazwa PHPSESSID_ oczywiscie w tym momencie nie ma znaczenia.. może to byc równie dobrze ABCDE, ale piszę tak żeby coś pokazać..)

Po tym zabiegu ciastko PHPSESSID_ zostaje utworzone od razu, a PHPSESSID dopiero po Odświeżeniu.. komentarz do tego faktu mógłby być taki, że nowe ciastka (wysłane przez php w danym momencie) są ustawiane przez przeglądarki wcześniej w stosunku do ciastek ustawionych wcześniej... przynajmniej tak to wygląda.....

jest może jakiś ekspert od HTTP??smile.gif
Wszelkie spostrzeżenia będą mile widziane..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.