Session sluit niet
Ik ben echt wat je noemt een startende phper en probeer nu een login scriptje te bouwen. Het lukt al aardig maar nu loop ik toch echt tegen een probleem waar ik zel niet uitkom en hoopte ik dat iemand mij wil vertellen wat ik fout doe.
Op het moment dat ik wil uitloggen en klik op de submit button die ik hier voor aangemaakt heb lijkt het of ik succesvol ben uitgelogd echter als ik de browser niet afsluit en naar de link ga van de beveiligde pagina opent die de pagina daarna gewoon.
Dit is de code voor die ik heb voor mijn <html> tag:
Ik hoop dat iemand mij even in de juiste richting wil brengen.
Op het moment dat ik wil uitloggen en klik op de submit button die ik hier voor aangemaakt heb lijkt het of ik succesvol ben uitgelogd echter als ik de browser niet afsluit en naar de link ga van de beveiligde pagina opent die de pagina daarna gewoon.
Dit is de code voor die ik heb voor mijn <html> tag:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
if (!isset($_SESSION["email"])){
$tekst = "U bent nog niet ingelogd, <a href=\"../../index.php\">klik hier</a> om in te loggen";
echo($tekst);
exit();
}
if (isset($_POST['u'])){
session_unset(); // alle variabelen vrijgeven
session_destroy();} // sessie afsluiten
?>
session_start();
if (!isset($_SESSION["email"])){
$tekst = "U bent nog niet ingelogd, <a href=\"../../index.php\">klik hier</a> om in te loggen";
echo($tekst);
exit();
}
if (isset($_POST['u'])){
session_unset(); // alle variabelen vrijgeven
session_destroy();} // sessie afsluiten
?>
Ik hoop dat iemand mij even in de juiste richting wil brengen.
Weet niet of je ook cookie's gebruikt?
zo ja, probeer dit:
pas wel ff je cookie-data aan
zo ja, probeer dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
session_destroy();
// cookies deleten
if(isset($_COOKIE['gebruikersnaam'])) {
setcookie("gebruikersnaam", "", time(), "/");
}
if(isset($_COOKIE['wachtwoord'])) {
setcookie("gebruikersnaam", "", time(), "/");
}
if(isset($_COOKIE['voornaam'])) {
setcookie("voornaam", "", time(), "/");
}
if(isset($_COOKIE['achternaam'])) {
setcookie("achternaam", "", time(), "/");
}
// cookies deleten
if(isset($_COOKIE['gebruikersnaam'])) {
setcookie("gebruikersnaam", "", time(), "/");
}
if(isset($_COOKIE['wachtwoord'])) {
setcookie("gebruikersnaam", "", time(), "/");
}
if(isset($_COOKIE['voornaam'])) {
setcookie("voornaam", "", time(), "/");
}
if(isset($_COOKIE['achternaam'])) {
setcookie("achternaam", "", time(), "/");
}
pas wel ff je cookie-data aan
Ik gooi de session altijd weg en maak direct een nieuwe met een nieuw id.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// begin van je script
session_start();
// bij uitloggen
session_destroy();
session_id(sha1(microtime()));
session_start();
?>
// begin van je script
session_start();
// bij uitloggen
session_destroy();
session_id(sha1(microtime()));
session_start();
?>
Thanks voor de snelle reacties.
Ik kom er alleen nog steeds niet helemaal uit, ik krijg nu de volgende melding als ik probeer in te loggen op mijn beveiligde pagina:
Parse error: syntax error, unexpected $end in /home/wp00216/domains/qepa.nl/public_html/admin/login/login_on/index.php on line 53
regel 53 op deze pagina is de </html> tag, hierbij de code zoals ik hem nu heb staan.
Ik kom er alleen nog steeds niet helemaal uit, ik krijg nu de volgende melding als ik probeer in te loggen op mijn beveiligde pagina:
Parse error: syntax error, unexpected $end in /home/wp00216/domains/qepa.nl/public_html/admin/login/login_on/index.php on line 53
regel 53 op deze pagina is de </html> tag, hierbij de code zoals ik hem nu heb staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
if (!isset($_SESSION["email"])){
$tekst = "U bent nog niet ingelogd, <a href=\"../../index.php\">klik hier</a> om in te loggen";
echo($tekst);
exit();
}
if (isset($_POST['u'])){
session_destroy();
session_id(sha1(microtime()));
session_start();
?>
session_start();
if (!isset($_SESSION["email"])){
$tekst = "U bent nog niet ingelogd, <a href=\"../../index.php\">klik hier</a> om in te loggen";
echo($tekst);
exit();
}
if (isset($_POST['u'])){
session_destroy();
session_id(sha1(microtime()));
session_start();
?>
unexpected $end betekend dat je een }(Accolade) teken mist.
Je sluit if() niet af. Je hebt een { maar geen } achter de if().
De foutmelding is nu weg, die had ik over het hoofd gezien. Maar ik blijf het probleem houden dat als ik uitgelogd ben en weer naar de url van de beveiligde pagina ga ik die gewoon kan benaderen. Dit is zoals de code er nu uitziet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start();
if (!isset($_SESSION["email"])){
$tekst = "U bent nog niet ingelogd, <a href=\"../../index.php\">klik hier</a> om in te loggen";
echo($tekst);
exit();
}
if (isset($_POST['u'])){
session_destroy();
session_id(sha1(microtime()));
session_start();
}
?>
session_start();
if (!isset($_SESSION["email"])){
$tekst = "U bent nog niet ingelogd, <a href=\"../../index.php\">klik hier</a> om in te loggen";
echo($tekst);
exit();
}
if (isset($_POST['u'])){
session_destroy();
session_id(sha1(microtime()));
session_start();
}
?>
Bas Engel op 16/08/2012 23:09:53:
.. dat als ik uitgelogd ben en weer naar de url van de beveiligde pagina ga ..
En hoe check jij daar of je toegang hebt?
Door de link te kopieren als ik ingelogd ben en in de adresbalk plak als ik ben uitgelogd.
Ik bedoel in het bestandje.
Door:
if (!isset($_SESSION["email"]))
Of bedoel je iets anders?
if (!isset($_SESSION["email"]))
Of bedoel je iets anders?
if (!isset($_SESSION["email"])) .... en dan mag je verder?
Is dat niet goed dan?
!isset betekent eigenlijk zoveel als, als waarde niet bestaat... dan. Dus ik denk dat je moet kijken of $_SESSION['email'] werkelijk bestaat.
Verder zou ik ook geen link aan de gebruiker tonen, maar de gebruiker gewoon naar de inlog pagina sturen (persoonlijke keuze).
Tevens zou ik twee sessies aanmaken:
1. $_SESSION['user']['id'] -> ID van de gebruiker,
2. $_SESSION['user']['session'] -> persoonlijke sessie van de gebruiker
Op iedere pagina kijk je dan of die sessie nog in de database staat en natuurlijk match met $_SESSION['user']['id']. Op de inlog pagina moet je $_SESSION['user']['session'] ook in de database opslaan samen met $_SESSION['user']['id'].
Daarnaast zou ik kijken of de gebruiker niet te lang inactief is. Daarmee bedoel ik als een gebruiker in 15 à 30 minuten geen enkele pagina heeft herladen, dat hij/zij naar de inlog pagina wordt doorverwezen.
Verder zou ik ook geen link aan de gebruiker tonen, maar de gebruiker gewoon naar de inlog pagina sturen (persoonlijke keuze).
Code (php)
Tevens zou ik twee sessies aanmaken:
1. $_SESSION['user']['id'] -> ID van de gebruiker,
2. $_SESSION['user']['session'] -> persoonlijke sessie van de gebruiker
Op iedere pagina kijk je dan of die sessie nog in de database staat en natuurlijk match met $_SESSION['user']['id']. Op de inlog pagina moet je $_SESSION['user']['session'] ook in de database opslaan samen met $_SESSION['user']['id'].
Daarnaast zou ik kijken of de gebruiker niet te lang inactief is. Daarmee bedoel ik als een gebruiker in 15 à 30 minuten geen enkele pagina heeft herladen, dat hij/zij naar de inlog pagina wordt doorverwezen.
Hoe ik meestal test of de sessie ook echt beeindigd is is zo.
Op het login scherm print_r($_SESSION); zetten. Als je succesvol bent uitgelogd zal het een lege array geven. Ben je nog wel ingelogd zal er in jou geval email => [email protected] staan. Waar uiteraard [email protected] jou email is.
Ik redirect mensen altijd weer naar het inlogscherm zodra er uitgelogd wordt, meestal zijn mijn login systemen voor ons eigen CMS. Maar als het gewoon een login is, zet je print_r($_SESSION); gewoon op de pagina waar je heen gaat als mensen uitloggen.
Op het login scherm print_r($_SESSION); zetten. Als je succesvol bent uitgelogd zal het een lege array geven. Ben je nog wel ingelogd zal er in jou geval email => [email protected] staan. Waar uiteraard [email protected] jou email is.
Ik redirect mensen altijd weer naar het inlogscherm zodra er uitgelogd wordt, meestal zijn mijn login systemen voor ons eigen CMS. Maar als het gewoon een login is, zet je print_r($_SESSION); gewoon op de pagina waar je heen gaat als mensen uitloggen.
Als de controle met !isset plaats vindt zoals in je code in je openingspost is het op zich goed. Als niet bestaat, dan melding.
Maar hoe controleer je op de beveiligde pagina?
Ten aanzien van je code nog wat opmerkingen:
Zou ik korter schrijven:
Let ook op ' (in php zoals bv echo) ipv " (voor HTML).
Of, nog korter, gewoon:
Waarom de exit eigenlijk? Je beeindigt daarmee het hele script (dus ook de verdere opmaak/layout). Hierdoor missen, volgens mij zaken als </body></html> (en mogelijk nog wat </div>'s).
Maar hoe controleer je op de beveiligde pagina?
Ten aanzien van je code nog wat opmerkingen:
Code (php)
Zou ik korter schrijven:
Code (php)
Let ook op ' (in php zoals bv echo) ipv " (voor HTML).
Of, nog korter, gewoon:
Code (php)
Waarom de exit eigenlijk? Je beeindigt daarmee het hele script (dus ook de verdere opmaak/layout). Hierdoor missen, volgens mij zaken als </body></html> (en mogelijk nog wat </div>'s).
Gewijzigd op 17/08/2012 07:58:15 door Obelix Idefix
Obelix,
Zijn originele !isset lijkt mij niet goed. Hij krijgt netjes een melding wanneer er niet is ingelogd, maar wat nu als er wel succesvol is ingelogd? Lijkt me dat hier nog een else moet zijn die hem of doorverwijst naar de juiste pagina, of de pagina laat zien.
Zijn originele !isset lijkt mij niet goed. Hij krijgt netjes een melding wanneer er niet is ingelogd, maar wat nu als er wel succesvol is ingelogd? Lijkt me dat hier nog een else moet zijn die hem of doorverwijst naar de juiste pagina, of de pagina laat zien.
Volgens mij moet je eerst een onderscheid maken tussen sessie en het ingelogd zijn van de gebruiker. Dat is namelijk niet hetzelfde. Je kan namelijk prima een sessie per gebruiker hebben, zonder dat de gebruiker ingelogd is.
Ik heb gebruikers gegevens in de sessie staan die bepalen of een gebruiker ingelogd is of niet. Zo staat er bijvoorbeeld zijn user_id in en misschien ook nog wel zijn username of andere settings. Op het moment dat een pagina wordt opgeroepen wordt er gekeken of de gebruiker is ingelogd, namelijk door te controleren of er een user_id is gegeven in de sessie. Zo nee, dan is de gebruiker niet ingelogd (de sessie bestaat dus wel!).
Enige wat je dan hoeft te doen met het uitloggen is de gegevens uit de sessie halen die bepalen of de gebruiker is ingelogd. In bovestaande geval dus user_id. Een log out script zou dus in feite zo simpel kunnen zijn als:
De volgende keer dat een pagina wordt opgeroepen bestaat de user_id niet en dus is er geen gebruiker ingelogd.
Ik heb gebruikers gegevens in de sessie staan die bepalen of een gebruiker ingelogd is of niet. Zo staat er bijvoorbeeld zijn user_id in en misschien ook nog wel zijn username of andere settings. Op het moment dat een pagina wordt opgeroepen wordt er gekeken of de gebruiker is ingelogd, namelijk door te controleren of er een user_id is gegeven in de sessie. Zo nee, dan is de gebruiker niet ingelogd (de sessie bestaat dus wel!).
Enige wat je dan hoeft te doen met het uitloggen is de gegevens uit de sessie halen die bepalen of de gebruiker is ingelogd. In bovestaande geval dus user_id. Een log out script zou dus in feite zo simpel kunnen zijn als:
De volgende keer dat een pagina wordt opgeroepen bestaat de user_id niet en dus is er geen gebruiker ingelogd.




