Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> setcookie niszczy sesje?
walker
post 1.07.2005, 14:47:40
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.09.2004
Skąd: Wrocław vs Opole

Ostrzeżenie: (0%)
-----


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

Ten post edytował walker 1.07.2005, 14:52:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
dr_bonzo
post 1.07.2005, 15:09:25
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A nie mozesz za pomoca php wygenerowac kodu javascript? Zmiescisz wiecej niz w ciastkach


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
walker
post 1.07.2005, 15:55:36
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.09.2004
Skąd: Wrocław vs Opole

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:57