Czy powinienem wywoływać zmienną, która przechowuje wartość SESSION zamiast wywoływania rzeczywistej sesji w PHP?

Jeśli zmienna sesji PHP jest przechowywana w pliku (tak jak jest domyślnie), to powiedzmy, że przechowuję nazwę użytkownika w zmiennej sesji...

$_SESSION['username'] = 'Jason Davis';

Teraz, gdy strona jest budowana, jeśli wywołam $_SESSION['username'] 100 razy w procesie budowania strony, czy trafi on na pliki sesji i wykona je 100 razy?

To samo, ale sesja jest przechowywana w MySQL. Czy wykonałby zapytanie do bazy danych 100 razy, aby pobrać nazwę użytkownika z tabeli sesji?

Próbuję tylko dowiedzieć się, czy powinienem wywoływać zmienną sesji 1 raz na stronie, a następnie przechowywać ją w zmiennej lokalnej i używać jej dla pozostałych 99 razy. Lubię to...

$username = $_SESSION['username'];
echo $username; // 100 times throughout all the files that build my page.

Uwaga: zdaj sobie sprawę, że to tylko przykład, w rzeczywistości będę potrzebować dostępu do więcej niż tylko sesji z nazwą użytkownika, a 100 razy najprawdopodobniej byłoby mniej, ale rozłożone na wiele kluczy/wartości sesji


person JasonDavis    schedule 21.01.2010    source źródło


Odpowiedzi (2)


Nie, dane sesji są odczytywane, gdy session_start jest wywoływane i zapisywane po zakończeniu działania skryptu lub session_write_close jest nazywany.

person Gumbo    schedule 21.01.2010
comment
Więc jeśli zmienię sesję tak, aby używała MySQL do przechowywania danych i wielokrotnie wywołam $_SESSION['username'], to nie będzie to nadal pobierać mojej sesji z MySQL? - person JasonDavis; 22.01.2010
comment
@jasondavis: Tak, dane sesji są odczytywane tylko raz po wywołaniu session_start, a następnie zapisywane w $_SESSION. - person Gumbo; 22.01.2010

Plik jest odczytywany tylko po wywołaniu funkcji session_start().

Jeśli chodzi o MySQL, jeśli zrobisz zapytanie, pobierzesz nazwę użytkownika i zapiszesz ją w zmiennej, oczywiście nie będzie żadnych dodatkowych zapytań. Jeśli przechowujesz coś w zmiennej, jest to kopia i nie musisz nic robić z oryginalną wartością, z której to masz.

pozdrawiam, lamowie

person lamas    schedule 21.01.2010
comment
Witam Zdaję sobie sprawę, że przechowuję go w zmiennej, która nie trafi ponownie do bazy danych, Moje pytanie brzmi, czy sesja PHP będzie ją uderzać w kółko, jeśli NIE zachowam jej w zmiennej lokalnej - person JasonDavis; 22.01.2010
comment
W takim przypadku zachowuje się po prostu jak Gumbo i powiedziałem - Możesz robić, co chcesz z $_SESSION i będzie po prostu zachowywać się jak normalna zmienna, dopóki nie wywołasz ponownie funkcji session_x() :) Więc nie, nie musisz przechowywać go w zmiennej lokalnej. Ale jeśli nie chcesz ciągle pisać $_SESSION, sugeruję to zrobić! - person lamas; 22.01.2010