Session sluit niet
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.
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
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();
?>
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().
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.
if (!isset($_SESSION["email"]))
Of bedoel je iets anders?
if (!isset($_SESSION["email"])) .... en dan mag je verder?
Is dat niet goed dan?
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.
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.
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
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.
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.