Beste SiteDealers,
Ik ben momenteel bezig met het inlog script van webmensen.
Alleen stuit ik op 1 probleem momenteel met dit script.
Het onthouden van de cookies.
Wanneer ik in de browsers Firefox en Internet Explorer 9 wil inloggen dan gaat alles goed, totdat ik in de adresbalk het adres opnieuw intyp (localhost / localhost/index.php in dit geval) dan komt er i.p.v 'u bent ingelogd als ..' weer het inlog scherm. Tevens doet hij na 2 á 3 keer het opnieuw intypen van het adres het pas wel.
In de browser Safari heb ik hier geen enkel probleem mee.
Ook als ik in de browsers Firefox en Internet Explorer 9 wil uitloggen onthoud hij de sessie / cookies en blijf je dus gewoon ingelogd staat terwijl de browser Safari me wel netjes uitlogd.
Kan iemand mij helpen?
Onderstaande de code:
config.php
uitloggen.php:PHP Code:
$CookiesVerloopTijd = 604800;
// ---------------------------------------
@mysql_connect($sever, $username, $password) or die("Er kan geen verbinding gemaakt worden met de database! Neemt contact op met de systeembeheerder of probeer het later nog eens.");
@mysql_select_db($database) or die("De database kan niet geselecteerd worden! Neemt contact op met de systeembeheerder of probeer het later nog eens.");
@ini_set("magic_quotes_gpc","1");
@ini_set("magic_quotes_runtime","0");
@ini_set("magic_quotes_sybase","0");
@error_reporting(2039);
if(getenv(HTTP_X_FORWARDED_FOR)) { $REMOTE_ADDR = getenv(HTTP_X_FORWARDED_FOR); }
elseif(getenv(HTTP_CLIENT_IP)) { $REMOTE_ADDR = getenv(HTTP_CLIENT_IP); }
else { $REMOTE_ADDR = getenv(REMOTE_ADDR); }
$UnixTijd = time();
$LedensysteemMelding = "";
function VerwijderCookies() {
setcookie("LedensysteemID", "gebruikersnaam", $UnixTijd-(60*60*24));
setcookie("LedensysteemWW", "wachtwoord", $UnixTijd-(60*60*24));
unset($_COOKIE["LedensysteemID"]);
unset($_COOKIE["LedensysteemWW"]);
}
// Uitloggen
if(isset($uitloggen)) {
VerwijderCookies();
}
// Inloggen
elseif($_POST["inloggen"] && $_POST["gebruikersnaam"] && $_POST["wachtwoord"]) {
$Lid = mysql_fetch_object(mysql_query("SELECT ID,Wachtwoord,Verbannen,Bevestigen FROM $TabelLeden WHERE Gebruikersnaam = '{$_POST["gebruikersnaam"]}'"));
if(!$Lid || $Lid->Wachtwoord != md5($_POST["wachtwoord"])) {
$LedensysteemMelding = "Gebruikersnaam en / of wachtwoord onjuist!";
VerwijderCookies();
}
elseif($Lid->Bevestigen) {
$LedensysteemMelding = "Je hebt je account nog niet via e-mail bevestigd!<br><a href='bevestigen.php'>Verstuur de bevestigingsmail opnieuw.</a>";
VerwijderCookies();
}
elseif($Lid->Verbannen) {
$LedensysteemMelding = "Je bent verbannen!";
VerwijderCookies();
}
else {
mysql_query("UPDATE $TabelLeden SET IPadres = '$REMOTE_ADDR' WHERE ID = '$Lid->ID'");
setcookie("LedensysteemID", $Lid->ID, $UnixTijd+$CookiesVerloopTijd);
setcookie("LedensysteemWW", $Lid->Wachtwoord, $UnixTijd+$CookiesVerloopTijd);
$_COOKIE["LedensysteemID"] = $Lid->ID;
$_COOKIE["LedensysteemWW"] = $Lid->Wachtwoord;
}
}
// Gegevens ophalen
$login = false; $InlogLid = "";
$_COOKIE["LedensysteemID"] = intval($_COOKIE["LedensysteemID"]);
$_COOKIE["LedensysteemWW"] = ereg('^[A-Fa-f0-9]{32}$',$_COOKIE["LedensysteemWW"]) ? $_COOKIE["LedensysteemWW"] : "";
if(!$uitloggen && $_COOKIE["LedensysteemID"] && $_COOKIE["LedensysteemWW"]) {
if($Lid = mysql_fetch_object(mysql_query("SELECT ID,Naam,Mail,Gebruikersnaam,Verbannen FROM $TabelLeden WHERE ID = '{$_COOKIE["LedensysteemID"]}' AND Wachtwoord = '{$_COOKIE["LedensysteemWW"]}' AND IPadres = '$REMOTE_ADDR' AND Verbannen != '1'"))) {
mysql_query("UPDATE $TabelLeden SET Inlogdatum = '$UnixTijd' WHERE ID = '$Lid->ID'");
$InlogLid = $Lid;
$login = true;
}
}
PHP Code:
$uitloggen = 1;
- [PHP] Cookies blijven onthouden.
-
15-11-2010, 14:15 #1
- Berichten
- 17
- Lid sinds
- 14 Jaar
[PHP] Cookies blijven onthouden.
-
In de schijnwerper
-
15-11-2010, 14:21 #2
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: [PHP] Cookies blijven onthouden.
Gewoon een kwestie van zelf debuggen denk ik, mogelijke reden dat je in firefox of een andere browser wel ingelogd blijft kan zijn omdat cache is ingeschakeld (probeer ctrl+f5). Worden je pagina's ook gecached (Gzip oid?)
-
15-11-2010, 14:33 #3
- Berichten
- 943
- Lid sinds
- 15 Jaar
Re: [PHP] Cookies blijven onthouden.
Cookies zijn als het goed is voor één domein zeg maar, dus je hebt aparte cookies nodig voor:
www.site.nl
http://www.site.nl
site.nl
http://site.nl
Er was een oplossing voor in .htaccess, alleen weet ik die niet meer precies...
-
15-11-2010, 14:34 #4
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: [PHP] Cookies blijven onthouden.
Cookies zijn als het goed is voor één domein zeg maar, dus je hebt aparte cookies nodig voor:
www.site.nl
http://www.site.nl
site.nl
http://site.nl
Er was een oplossing voor in .htaccess, alleen weet ik die niet meer precies...
-
15-11-2010, 14:36 #5
- Berichten
- 943
- Lid sinds
- 15 Jaar
Re: [PHP] Cookies blijven onthouden.
Misschien dat jij dat voor de TS kunt uittypen, ik beschik helaas niet over de kennis van .htaccess.
-
15-11-2010, 14:38 #6
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: [PHP] Cookies blijven onthouden.
Ik citeer:
Origineel gepost door PHP.net
domain
The domain that the cookie is available to. To make the cookie available on all subdomains of example.com (including example.com itself) then you'd set it to '.example.com'. Although some browsers will accept cookies without the initial ., » RFC 2109 requires it to be included. Setting the domain to 'www.example.com' or '.www.example.com' will make the cookie only available in the www subdomain.
-
15-11-2010, 15:08 #7
- Berichten
- 203
- Lid sinds
- 16 Jaar
Re: [PHP] Cookies blijven onthouden.
PHP Code:function VerwijderCookies() {
setcookie("LedensysteemID", "gebruikersnaam", $UnixTijd-(60*60*24));
setcookie("LedensysteemWW", "wachtwoord", $UnixTijd-(60*60*24));
unset($_COOKIE["LedensysteemID"]);
unset($_COOKIE["LedensysteemWW"]);
}
1x is wel genoeg..
-
15-11-2010, 15:18 #8
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Re: [PHP] Cookies blijven onthouden.
PHP Code:function VerwijderCookies() {
setcookie("LedensysteemID", "gebruikersnaam", $UnixTijd-(60*60*24));
setcookie("LedensysteemWW", "wachtwoord", $UnixTijd-(60*60*24));
unset($_COOKIE["LedensysteemID"]);
unset($_COOKIE["LedensysteemWW"]);
}
1x is wel genoeg..
-
15-11-2010, 16:27 #9
- Berichten
- 203
- Lid sinds
- 16 Jaar
Re: [PHP] Cookies blijven onthouden.
Misschien ligt het aan de server(instellingen).
setcookie("LedensysteemID","", time()-999999);
setcookie("LedensysteemWW","", time()-999999);
-
15-11-2010, 18:21 #10
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: [PHP] Cookies blijven onthouden.
sowieso even het domein meegeven als je de cookie instelt;
setcookie("LedensysteemID", $username, mktime()+3600, "/"); // cookie voor 1 uur
Uitloggen;
setcookie("LedensysteemID", "", mktime()-1, "/"); // cookie verwijderen
dan hoef je unset niet meer te gebruiken omdat de browser automatisch de cookies verwijderd die ouder zijn dan het ingestelde maximum. Met time()-1 geef je de cookie dus een geldigheidsduur tot 1 seconden geleden en zullen ze door de browser verwijderd worden.
Verder kan het dat de code toch wordt uitgevoerd omdat je nergens $uitloggen = false; plaatst. In sommige gevallen wordt de code toch uitgevoerd. Dit kun je testen door dit stuk;
if(isset($uitloggen)) { VerwijderCookies(); }
te vervangen voor;
if(isset($uitloggen)) { VerwijderCookies(); die("De cookies zijn verwijderd"); }
als je nu op elke pagina de melding krijgt dat de cookies zijn verwijderd weet je dat $uitloggen dus altijd 'true' terug stuur. Dit is dan op te lossen door $uitloggen standaard op false te zetten en in uitloggen.php pas de waarde op true (of 1) te zetten.
De opbouw van je pagina is sowieso niet helemaal logisch wat ik zo zie.. je config.php include je normaal gesproken bovenaan de pagina (naja, kwestie van gewoonte dan), daar zet je nu een variabel erboven.
Waarom plaats je niet gewoon in uitloggen.php de code om de cookies te clearen en that's it. Dan hoef je in config.php geen controle te plaatsen of je uit wilt loggen en hoef je die functie daar ook niet te plaatsen. Die controle en de functie staan ook heel erg onlogisch als je ze in de config.php plaatst.. de functie zou logischer staat in een functions.php of iets dergelijks terwijl de controle weer logischer is op de index.php (of logout.php als je daar een controle doet na een submit bijvoorbeeld).
In jouw opbouw zou ik gewoon die functie weglaten en in uitloggen.php simpelweg dit plaatsen;
<?php
setcookie("LedensysteemID", "", mktime()-1, "/"); // cookie verwijderen
setcookie("LedensysteemWW", "", mktime()-1, "/"); // cookie verwijderen
echo 'U bent uitgelogd, <a href="index.php">keer terug</a>.';
?>
Dit geeft je ook de zekerheid dat er op alle pagina's BUITEN de uitloggen.php een code staat die de cookies verwijderd. Als je dan nog steeds tegen je probleem aanloopt weet je dat je fout niet bij de uitlog code zit maar dat je cookies niet worden opgeslagen en in dat geval zal je waarschijnlijk de code moeten gebruiken om het domein erbij te plaatsen;
setcookie("LedensysteemID", $Lid->id, mktime() + $CookiesVerloopTijd, "/");
Het is trouwens ook nergens voor nodig om $UnixTimestamp te gebruiken, aangezien je geen berekening uitvoert om tot die waarde te komen kun je op deze plekken het beste gewoon de functie time() of mktime() gebruiken.
-
16-11-2010, 15:40 #11
- Berichten
- 750
- Lid sinds
- 15 Jaar
Re: [PHP] Cookies blijven onthouden.
Heel erg gevaarlijk om gebruikersnaam en een wachtwoord in cookies tezetten. Beter kun je werken met een token dat een sha512 hash is van de ip en de browser useragent en andere browser mogelijkheiden.
Tags voor dit bericht
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic