Drupal CMS posiada pewien system przechowywania danych w sesji i globalnej tablicy sesyjnej $_SESSION. Wartości - jak to bywa podczas operowania na sesji - są przekazywane globalnie na wszystkie podstrony serwisu.

Data dodania: 2010-09-03

Wyświetleń: 1869

Przedrukowań: 0

Głosy dodatnie: 2

Głosy ujemne: 0

WIEDZA

2 Ocena

Licencja: Creative Commons

Tablica $_SESSION jest dostępna dla użytkowników zarówno uwierzytelnionych, jak i niezalogowanych. Czasem jednak zdarzy się, że tablica $_SESSION po prostu przestaje poprawnie funkcjonować.

Generalnie: WTF?

Taki zonk zdarzył mi się podczas pisania modułów do autorskiego sklepu internetowegoopartego o Drupal CMS. Wszystkie testy podczas programowania modułów przeprowadzałem na użytkowniku stale zalogowanym. W momencie, w którym zostały ukończone wszystkie moduły odpowiadające za zarządzanie produktami, koszykiem, klientami, zamówieniami etc., wylogowałem się i sprawdziłem jak działa system dla użytkownika niezalogowanego - i tu WTF? Dodaję produkt do koszyka - koszyk pusty - co jest &%^&##?

Pomijając stan irytacji, 3h grzebałem w poszukiwaniu dziury w całym, sprawdzałem zmienne, echowałem, printowałem - wszystko na miejscu, tylko po odświeżeniu strony kupa.

I tutaj lekki zonk

Rozwiązanie okazało się raz - trywialne, dwa - cholernym zonkiem. Przypadkowo operując na użytkownikach i klientach sklepu, wywaliłam usera o ID '0' z tabeli 'users'. Co się okazało: Drupal wykorzystuje konto uid=0 do pracowania na sesji dla użytkowników typu 'anonymous'. Jest to operacją domyślną, zatem jeśli ktoś z was napotka taką sytuację w trakcie developerki modułów do Drupala - zalecam sprawdzić zawartość tabeli 'users' :D Oszczędzi to Wam sporo roboty w przeciwieństwie do mnie:)

Należy również zwrócić uwagę na sposób analizowania poprawności tabeli users przez phpMyAdmin, który zgłasza błąd w rekordzie użytkownika o id=0, jako, że kolumna jest autoinkrementowana. Ten błąd można oczywiście spokojnie pominąć :)

Licencja: Creative Commons
2 Ocena