Kan ikke ødelægge destruere $_session

Tags:    php

Hej

Jeg sidder og roder med et lille projekt med et log in, da jeg er i gang med at lære om sessions.

Mit problem er, at jeg ikke kan logge ud !

Min session bliver ikke destrueret selvom jeg bruger session_destroy(); eller unset($_SESSION['']);

Her er min kode:

index.php
Fold kodeboks ind/udPHP kode 


code_login.php - undersøger om det indtastede brugernavn og password stemmer med den information, som er i databasen:

Fold kodeboks ind/udPHP kode 


code_logout.php - her forsøger jeg, at destruere brugerens session, som det kan ses i koden, så har jeg forsøgt mig med både session_destroy(); og unset() - jeg har prøvet, at bruge die(); og der endte jeg med at få en Undefined variable: _SESSION fejl, så det betyder vel, at sessionen er destrueret, men hvorfor er jeg så stadigvæk logget ind på index.php ?

Fold kodeboks ind/udPHP kode 


Jeg håber I kan gennemskue hvad der er galt - er også godt klar over, at min php-kode vist ikke er den mest optimerede I har set, men jeg er rimelig nybegynder så...(nu er I advaret !)

EDIT

Så virker det ! - jeg spurgte en klassekammerat (en lean mean code wizard), da vi sad i toget på vej til skole, om hvad der kunne være galt og det eneste han faktisk spurgte om var: "har du brugt session_start(); på siden ?" (code_logout.php)

Mig: "øhh, næææ det tror jeg ikke... jeg havde vist en idé om at funktionen session_destroy(); havde en "indbygget" session_start !".

Klassekammeraten: "nå, men så prøv, at tilføje session_start(); til siden, sagde han, alt imens han var dybt begravet i sin bærbar og tastede løs på et eller andet C# projekt" - det sagde uden at virke nedladende, så stor respekt til ham.




Indlæg senest redigeret d. 31.03.2014 23:04 af Bruger #16670
7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hvorfor sætter du sessionen $_SESSION['username'] = " "; i index.php?



zynzz har fanget fejlen, men jeg forklarer det lige.
Det der sker, er at du tjekker om din username session er tom og sætter så username sessionen til at være " ", det vil sige at selv om du ødelægger din session, bliver den sat igen ved reload.

Fold kodeboks ind/udPHP kode 


Jeg er helt sikker på om det er det eneste problem, men det forklare i hvert fald hvorfor din session ikke ser ud til at blive slettet.



zynzz har fanget fejlen, men jeg forklarer det lige.
Det der sker, er at du tjekker om din username session er tom og sætter så username sessionen til at være " ", det vil sige at selv om du ødelægger din session, bliver den sat igen ved reload.

Fold kodeboks ind/udPHP kode 



Grunden til at jeg sætter den til at være tom er, at hvis jeg ikke gør det, så får jeg en Undefined index: username fejl i linje 50 når siden starter op første gang.

Fold kodeboks ind/udPHP kode 


Hvilket jo er logisk (selv for mig), da jeg jo, på dette tidspunkt, endnu ikke har skrevet noget username som scriptet kan sammenligne med det, som står i databasen.


Jeg er helt sikker på om det er det eneste problem, men det forklare i hvert fald hvorfor din session ikke ser ud til at blive slettet.


Jeg tror du mener; at du ikke er sikker på, at det er det eneste problem - jeg er til gengæld rimelig sikker på, at det nok ikke er det eneste, som er galt !

Jeg forstår heller ikke, hvorfor session_destroy(); (den er jo altødelæggende)ikke kan gøre arbejdet med at ødelægge min session og derved undgå, at problemet overhovedet eksistere - måske er der noget som bliver cachet, men det er ikke noget jeg endnu har forstand på.







Indlæg senest redigeret d. 30.03.2014 12:41 af Bruger #16670
For at undgå problemer med Undefined Index, så skal du blot køre koden i et IF-statement hvor den tjekker om $_SESSION['username'] er sat. Hvis den ikke er det, så skal enten foretage sig ingenting eller returnere en fejl til brugeren.



For at undgå problemer med Undefined Index, så skal du blot køre koden i et IF-statement hvor den tjekker om $_SESSION['username'] er sat. Hvis den ikke er det, så skal enten foretage sig ingenting eller returnere en fejl til brugeren.




Men er det ikke også det jeg gør ?



Ikke helt.
Fold kodeboks ind/udPHP kode 

Du tjekker om værdien af $_SESSION['username'] er tom.
I stedet for at skrive
Fold kodeboks ind/udKode 

Og herefter give den en mere eller mindre blank værdi, så burde du i stedet vælge at tjekke om værdien er sat når du skal bruge den i linje 50
Fold kodeboks ind/udPHP kode 

Nu ved jeg så ikke hvorfor du vil oprette din formular ud fra sessions, men burde det ikke ske vha. "normale" variabler i stedet?



Indlæg senest redigeret d. 30.03.2014 13:56 af Bruger #17072
Hej

Løsning på problemet er fundet - læs min edit for at se løsningen.



t