PHP cookie blijft niet bewaard

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleem met het bewaren van mijn inloggegevens van mijn website

Ik maak gebruik van de volgende code om het cookie aan te maken en dus de gegevens op te slaan:

code:
1
2
setcookie("usrName",$_POST['loginName'], (time()+60*60*24*30),"/","domain.com","0");
setcookie("usrPass",$result[0], (time()+60*60*24*30),"/","domain.com","0");


Hierin wordt de inlognaam gebruikt en het wachtwoord opgeslagen dat uit een database is gehaald en vergeleken is met de ingevoerde waarde. Deze gegevens worden opgeslagen in een cookie

Nu werkt deze code prima wanneer ik het lokaal test op mijn localhost (de gegevens worden netjes opgeslagen). Echter zodra ik de code verplaats naar mijn website worden deze gegevens niet in het cookie opgeslagen. Het enige wat daadwerkelijk wordt opgeslagen is de sessionid, maar die wordt weer opgeruimd zodra de browser wordt afgesloten. Dus ik moet iedere keer weer opnieuw inloggen om de sessie weer op te starten en dit is precies niet wat ik wil

Heeft iemand dit vage probleem ook al eens gehad of weet iemand een oplossing?

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Ik neem aan dat je "domain.com" netjes vervangt met de werkelijke domeinnaam?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Klopt! Ik heb het even vervangen

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
En je weet zeker dat er geen output voor staat? (Zou namelijk kunnen zijn dat op je localhost de data automatisch eerst in de output-buffer wordt gezet en als het script uitgevoerd is pas wordt verstuurd).

edit: en een hele simpele debug-stap:
Open een verbinding met telnet, doe een http-request en kijk of alle set-cookie-headers er zijn :).

[ Voor 25% gewijzigd door Shadowman op 16-08-2006 20:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer je even te volgen hier. Moet ik de output nu expliciet definieren. Ik was ook al aan zoiets aan het denken, maar weet er geen oplossing voor.

Wat betreft de telnet, wil de verbinding maar niet tot stand komen dus kan ik het niet testen

Acties:
  • 0 Henk 'm!

Verwijderd

Het enige wat daadwerkelijk wordt opgeslagen is de sessionid, maar die wordt weer opgeruimd zodra de browser wordt afgesloten. Dus ik moet iedere keer weer opnieuw inloggen om de sessie weer op te starten en dit is precies niet wat ik wil
Sla gebruikersnamen en wachtwoorden _NOOIT_ op in cookies, aangezien dit best wel veiligheids issues met zich meebrengt.
Een cookie wordt bij iedere request in de header meegestuurd. Mocht een hacker/ ander evil persoon met kwade bedoeling jouw netwerk verkeer zitten te sniffen dan ziet hij het wachtwoord wel heel vaak voorbij komen....

Een wachtwoord sla je alleen op in de database oid en dan het liefst gecodeerd. Ook niet opslaan in een sessie variable dat is ook niet nodig en kan onveilig zijn. Je hebt het password maar eenmalig nodig en dat is om te verifieren dat de gebruiker bij de inlog poging het wachtwoord weet, verder niet.

Wat je in jouw geval kunt doen is, zelf een sessie variable aanmaken en deze als cookie bij de gebruiker zetten. Ook hou je in de database een tabel bij met je eigen gemaakte sessievariable om bij te houden welke sessie bij welke gebuiker hoort. (En om bijvoorbeeld het IP adres van de sessie op te slaan om sessie hijacking tegen te gaan)

  • Av3ng3rtje
  • Registratie: December 2002
  • Laatst online: 18-08 10:15
Wat ik zelf doe is dit:

PHP:
1
2
3
4
5
6
7
8
9
10
$hash = md5(time());
    
$userData = $db->fetch($selectUser);

$lastLogin = time();
$userIP = $_SERVER["REMOTE_ADDR"];
    
$db->query("UPDATE `users` SET `hash` = '{$hash}', `lastLogin` = '{$lastLogin}', ip = '{$userIP}' WHERE `userID` = '{$userData['userID']}';");
    
setcookie("cookienaam",$hash,time()+$config->siteCookieExpireTime,'/');


Ik maak een hash, die zet ik in de database, en in een cookie.. als die hash van de cookie hetzelfde is als in de database bouw ik een array op met gebruikers gegevens die overal in de site kan gebruiken.. wat ik wel zou doen, als je een drukke site hebt dat je eventueel een random getal er bij plakt (bij de md5(time()))

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Je bent ook al bekend met P3P ?
Oftewel, doet hij het in Firefox wel? :)

[ Voor 28% gewijzigd door frickY op 17-08-2006 11:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik zelf firefox en helaas doet zich het probleem hier ook voor. Ik vind het erg vreemd aangezien het eerst allemaal naar behoren werkte totdat ik allemaal mails kreeg van gebruikers die bepaalde pagina's niet meer konden zien of het niet lukte om het wachtwoord op te slaan.

Dit terwijl er geen update op de server heeft plaatsgevonden

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Naar aanleiding van dusty postte je; Klopt, ik heb het vervangen.
Post eens de exacte code zoals je die nu gebruikt?

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Hoe staat de error-reporting ingesteld op de server waar het niet werkt, en staat display_errors aan? (Zo nee, zet dat aan + error-reporting op E_ALL (eventueel except notices) en kijk dan of je nog een melding krijgt van php).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben nu niet in staat om het een en ander te proberen, maar zodra ik terug ben van mijn trip zal ik er een blik op werpen. Alvast bedankt voor jullie reacties!

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Op een live server error_reporting op E_ALL zetten? Dan weet ik nog wel wat security-issues :X
Ik zou het wel aanzetten, en dan in je logfile laten zetten. Weergeven in de pagina zou ik alleen op een dev-server doen :)

Telnet: gebruik je wel de goede methode? op je command prompt:
code:
1
2
telnet www.example.com 80 [enter]
GET [enter]

GET moet in hoofdletters, en je krijgt niks op je scherm te zien tot de server wat teruggeeft.
Met de web-development toolbar kan je dat ook zien onder het kopje Information->sent headers (helemaal onderaan).
Pagina: 1