Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z sesjami
xsalok
post
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
  1. $_SESSION['login']
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
  1. function log_in(){
  2.  
  3. if ($this->db->connect()){
  4. $sql = "SELECT * FROM `users` WHERE `login` = '".mysql_real_escape_string($this->login)."' AND `password` = '".mysql_real_escape_string(md5($this->password))."' ";
  5. if(mysql_num_rows($this->db->select($sql))==1){
  6.  
  7.  
  8. $_SESSION['login']=$this->login;
  9. $_SESSION['zalogowany']=true;
  10. header("Location: zalogowany.php");
  11.  
  12. }
  13. else{
  14. echo'Niepoprawne dane logowania';
  15. }
  16.  
  17. }
  18. }


2. strona do wyświetlenia po zalogowaniu się
  1. <?php
  2.  
  3. echo'Logowanie zakończone sukcesem';
  4. echo ' Witaj ' .$_SESSION['login']. '!';
  5. echo '<button><a href="index.html">start</a></button>';
  6. ?>


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
goartur
post
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
Go to the top of the page
+Quote Post
miki22
post
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:
  1. if (isset($_COOKIE['PHPSESSID']))
  2. {
  3. }


Ten post edytował miki22 23.01.2016, 13:34:08
Go to the top of the page
+Quote Post
xsalok
post
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'])) questionmark.gif czyli jeżeli cookie, to zakładam sesje?
Go to the top of the page
+Quote Post
viking
post
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


--------------------
Go to the top of the page
+Quote Post
miki22
post
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:
  1. if (isset($_COOKIE['PHPSESSID']))
  2. {
  3.  
  4. if ($_SESSION['zalogowany'] === true)
  5. {
  6. echo'Logowanie zakończone sukcesem';
  7. echo ' Witaj ' .$_SESSION['login']. '!';
  8. echo '<button><a href="index.html">start</a></button>';
  9. ..... // dalej jakieś inne operacje
  10. exit();
  11. }
  12. }
  13. echo 'Nie jesteś zalogowany';
  14. echo '<button><a href="logowanie.html">Zaloguj się</a></button>';
  15.  



Cytat(viking @ 23.01.2016, 14:02:14 ) *
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.
Cytat(viking @ 23.01.2016, 14:02:14 ) *
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 haha.gif

Ten post edytował miki22 23.01.2016, 17:23:21
Go to the top of the page
+Quote Post
viking
post
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 smile.gif
Nawet jeśli będzie sprawdzał dla miliona to praca zerowa dla serwera.


--------------------
Go to the top of the page
+Quote Post
miki22
post
Post #8





Grupa: Zarejestrowani
Postów: 18
Pomógł: 2
Dołączył: 2.03.2012

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


Cytat(viking @ 23.01.2016, 14:24:36 ) *
A PHPSESSID to chyba id sesji smile.gif

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'
Cytat(viking @ 23.01.2016, 14:24:36 ) *
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 biggrin.gif

Ten post edytował miki22 23.01.2016, 14:42:37
Go to the top of the page
+Quote Post
viking
post
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.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 08:34