![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 18.01.2016 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Próbuję włączyć sesje do mojego skryptu logowania i jako że jestem początkujący napotkałem na pewien problem. Otóż po udanym logowaniu i zapisaniu do zmiennej loginu wpisanego przez użytkownika, na stronie do której przekierowuje chcę zrobić proste potwierdzenie logowania z napisem 'Witaj $_SESSION['login'] !'. Jednak php zwraca mi informację :Undefined variable: _SESSION in C:\xampp\htdocs\php_new\zalogowany.php on line 4, tj że zmienna nie została zdefiniowana. Części listigów plików: 1. funkcja odpowiedzialna za logowanie z klasy User
2. strona do wyświetlenia po zalogowaniu się
Sesje otwieram w pliku z formularzem, który działa poprawnie. Wiem że używam kilku przestarzałych metod ale dopiero rozpoczynam swoją zabawę z PHP Ten post edytował xsalok 23.01.2016, 12:54:49 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 27 Dołączył: 19.10.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zapomniałeś zdefiniować session_start
Ten post edytował goartur 23.01.2016, 13:20:06 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 18 Pomógł: 2 Dołączył: 2.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Na każdej stronie, na której mają być wykorzystywane zmienne z $_SESSION, musisz wcześniej uruchomić sesję czyli dać: session_start();
Aby bezsensownie nie uruchamiać sesji na każdej stronie jeśli klient nie jest zalogowany a przegląda tę stronę możesz dać to w if-ie, który by sprawdzał, czy jest coockie 'PHPSESSID' a więc czy już była założona sesja:
Ten post edytował miki22 23.01.2016, 13:34:08 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 18.01.2016 Ostrzeżenie: (0%) ![]() ![]() |
miki22, a czy nie powinno w if'ie być (!isset($_COOKIE['PHPSESSID']))
![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Session_start() tworzy albo wznawia istniejącą sesję więc nie ma sensu zbytniego sprawdzanie konkretnego identyfikatora. Będziesz chciał zmienić id sesji, trzeba będzie wszędzie poprawiać kod. Poza tym jest: http://fi2.php.net/manual/en/session.confi...sion.auto-start
-------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 18 Pomógł: 2 Dołączył: 2.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi mi o to że jak ktoś niezalogowany będzie przeglądał tę stronę to bezsensu serwer będzie zakładał sesję.
Zrobiłbym tak:
Session_start() tworzy albo wznawia istniejącą sesję więc nie ma sensu zbytniego sprawdzanie konkretnego identyfikatora. Będziesz chciał zmienić id sesji, trzeba będzie wszędzie poprawiać kod. Jest sens. Jeśli witryna ma 300 stron i na każdej mogą (ale nie muszą!) być wykorzystywane dane z $_SESSION to bezsensu inicjować zawsze sesje. Na witrynę wchodzi 1000 userów z czego tylko 2 dokonuje logowania. Gdyby nie ifować session_start() biedny serwer by zakładał 1000 sesji i trzymał je (domyślnie 30min.) a tak załozy tylko 2. Będziesz chciał zmienić id sesji, trzeba będzie wszędzie poprawiać kod. Zmiana id sesji nie ma znaczenia - ten if pyta się tylko czy jest PHPSESSID a nie jakie ma id. EDIT: Mała poprawka kodu php bo wcześniej napisałem bzdury ![]() Ten post edytował miki22 23.01.2016, 17:23:21 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A PHPSESSID to chyba id sesji
![]() Nawet jeśli będzie sprawdzał dla miliona to praca zerowa dla serwera. -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 18 Pomógł: 2 Dołączył: 2.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
A PHPSESSID to chyba id sesji ![]() Tak, ale id sesji jest wartością a if pyta się o istnienie a nie wartość. A dokładnie 'PHPSESSID' jest kluczem tablicy $_COOKIE a id sesji jego wartością. A if pyta sie tylko o istnienie tego klucza a nie o jego wartość. Po zmianie id sesji nadal będzie ona pod kluczem 'PHPSESSID' Nawet jeśli będzie sprawdzał dla miliona to praca zerowa dla serwera. No może masz rację. Może to kwestia mojej obsesji oszczędzania za wszelką cenę serwera. Nie wiem po co ale tak to już jest z obsesjami ![]() Ten post edytował miki22 23.01.2016, 14:42:37 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A po zmianie przez http://php.net/manual/pl/function.session-name.php albo http://php.net/manual/pl/session.configura...ni.session.name to już nie będzie PHPSESSID tylko np. 'dupa_blada'. Może być też teoretycznie przypadek że sesja nie będzie trzymana w cookie.
-------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 08:34 |