[PHP] Cookie wordt niet gezet *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Mijn eigen loginscript werkt wel, ik kan dus wel inloggen, alleen wordt het cookie niet gezet. Waardoor als ik het venster sluit en weer naar de pagina ga, ik weer moet inloggen.
Het cookie kan ik ook niet vinden in de map 'Cookies'.

index.php:
code:
1
2
3
4
5
6
7
<?PHP
if($_COOKIE['gebruikersnaam'] != $adminnaam && $_COOKIE['wachtwoord'] != md5($password) ) {
    echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"0; URL=login.php\">";
    die("");
}
?>
Hier komt de pagina inhoud


login.php:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?PHP
if($_GET['actie'] == login){
    if($_POST['gebruikersnaam'] == $adminnaam && $_POST['wachtwoord'] == md5($password) ){
        setcookie('gebruikersnaam', $_POST['gebruikersnaam'], time()+$_POST['tijdingelogd']);
        setcookie('wachtwoord',md5($_POST['wachtwoord']), time()+$_POST['inlogtijd']);
        echo "<font color=yellowgreen>»</font> Je bent ingelogd! Je wordt over 2 seconden naar je pagina gestuurd.";
        echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
    } 
    else {
        echo "<font color=yellowgreen>»</font> <b>Error:</b> Foute login.";
    }
}
if($_COOKIE['gebruikersnaam'] != $adminnaam && $_COOKIE['wachtwoord'] != $password){
    echo "<font color=yellowgreen>»</font> <b>LOGIN:</b>
    <form name=\"inloggen\" action=\"login.php?actie=login\" method=\"POST\">
    Gebruikersnaam:<br><input type=\"text\" name=\"gebruikersnaam\"><br><br>
    wachtwoord:<br><input type=\"password\" name=\"wachtwoord\"><br><br>
    Tijd ingelogd:<br><select size=\"1\" name=\"inlogtijd\">
    <option value=\"2211840000\">Altijd</option>
    <option value=\"3600\">Een uur</option>
    <option value=\"86400\">Een dag</option>
    <option value=\"604800\">Een week</option>
    <option value=\"18144000\">Een maand</option>
    <option value=\"22118400\">Een jaar</option>
    </select><br>
    <input type=\"submit\" name=\"verzenden\" value=\"login\">
    </form>
    ";
}
if($_GET[actie] == "uitloggen"){
    setcookie( "gebruikersnaam" , "" ); setcookie( "wachtwoord" , "" );
    echo "<font color=yellowgreen>»</font> Je bent nu uitgelogd.<br><br>";
    echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
}
    
?>


Edit: de verbinding maar ik met <?PHP include("config.php"); ?> bovenaan de pagina.
Maar ik heb hier alleen de php code gepost.

[ Voor 26% gewijzigd door verytallman op 04-12-2004 20:32 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
Wellicht moet je het domain van je cookie goed zetten. Veel browsers weigeren het cookie anders om veiligheidsredenen. Heb dat zelf eens gehad met sessie-cookies. Sowieso beter om sessies te gebruiken imho omdat het naam + pass opslaan in een cookie niet echt veilig is.

Acties:
  • 0 Henk 'm!

Verwijderd

Is het nou "tijdingelogd" of "inlogtijd"? Make up your mind ;)
Goed, in elk geval 1 van de 2 cookies wordt verprutst, dus daarom zal je niet ingelogd kunnen hebben. Verder is je code niet erg netjes, wat het dus erg onduidelijk maakt.

Geef even een path en het domein mee, zowel bij het maken als bij het verwijderen van de cookies.

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ik heb nu:
code:
1
2
setcookie('gebruikersnaam', $_POST['gebruikersnaam'], time()+$_POST['inlogtijd'], '/','www.domein.nl');
setcookie('wachtwoord',md5($_POST['wachtwoord']), time()+$_POST['inlogtijd'], '/','www.domein.nl');

Login lukt wel maar cookie wordt niet gezet.

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Kijk eens naar p3p-headers... Wellicht zijn het de privacy instellingen van internetexplorer...
Ik heb zelf trouwens wel eens problemen gehad met het zetten van cookies bij redirects. Nu waren dat header(...) redirects, maar toch. Misschien heb jij ook zoiets.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Maak er ook eens een (1) cookie van. De instellingen zijn hetzelfde?

Je moet ook eens de code bekijken die de web-server je opstuurt. Ik doe dat altijd met ethereal (die je vast kan vinden met Google), maar er zijn veel handigere programma's voor. Je kan dan tenminste een aantal dingen uitsluiten voordat we gaan raden.

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
ik gebruik nu:
code:
1
2
header("P3P: CP=\"ALL\""); 
setcookie('gebruikersnaam', $_POST['gebruikersnaam'], time()+$_POST['inlogtijd'], '/','.domein.nl');

En dan zet IE nog geen COOKIE !
In Firefox zet hij wel een cookie....

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ik heb de fout nu, voor het verwijderen van de cookies gebruikte ik:
code:
1
2
setcookie('gebruikersnaam',  "" , time()+$_POST['inlogtijd'], '/','www.domein.nl');
setcookie('wachtwoord', "" , time()+$_POST['inlogtijd'], '/','www.domein.nl');

Máár, bij het uitloggen worden er natuurlijk helemaal geen 'inlogtijd' veriabelen mee gepost. Ik heb nu de inlogtijd opties verwijderd en overal time()+(3600*24*60) genomen, en nu werkt het goed.

EDIT: ik hoorde iemand zeggen dat mn code rommelig is ofzo ? ik ben redelijk nieuw in PHP, maar dit lijkt me duidelijke code. Wat zou er beter kunnen dan ?

[ Voor 27% gewijzigd door verytallman op 05-12-2004 06:08 ]


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Ik vind het ook een beetje rommelig. Hiermee bedoel ik dat je veel statements op 1 regel zet, en erg weinig witruimte gebruikt.

Het maakt de computer niet uit of het bestand wat langer is hoor! ;)

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 14:27
Nog een tip... je kunt in en uit php switchen (ook in een if-statement). Deze code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if($_COOKIE['gebruikersnaam'] != $adminnaam && $_COOKIE['wachtwoord'] != $password){
    echo "<font color=yellowgreen>»</font> <b>LOGIN:</b>
    <form name=\"inloggen\" action=\"login.php?actie=login\" method=\"POST\">
    Gebruikersnaam:<br><input type=\"text\" name=\"gebruikersnaam\"><br><br>
    wachtwoord:<br><input type=\"password\" name=\"wachtwoord\"><br><br>
    Tijd ingelogd:<br><select size=\"1\" name=\"inlogtijd\">
    <option value=\"2211840000\">Altijd</option>
    <option value=\"3600\">Een uur</option>
    <option value=\"86400\">Een dag</option>
    <option value=\"604800\">Een week</option>
    <option value=\"18144000\">Een maand</option>
    <option value=\"22118400\">Een jaar</option>
    </select><br>
    <input type=\"submit\" name=\"verzenden\" value=\"login\">
    </form>
    ";
}

Kun je dus "beter" zo schrijven (scheelt je ook een hoop escapen):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if($_COOKIE['gebruikersnaam'] != $adminnaam && $_COOKIE['wachtwoord'] != $password){
?>
    <font color=yellowgreen>»</font> <b>LOGIN:</b>
    <form name="inloggen" action="login.php?actie=login" method="POST">
    Gebruikersnaam:<br><input type="text" name="gebruikersnaam"><br><br>
    wachtwoord:<br><input type="password" name="wachtwoord"><br><br>
    Tijd ingelogd:<br><select size="1" name="inlogtijd">
    <option value="2211840000">Altijd</option>
    <option value="3600">Een uur</option>
    <option value="86400">Een dag</option>
    <option value="604800">Een week</option>
    <option value="18144000">Een maand</option>
    <option value="22118400">Een jaar</option>
    </select><br>
    <input type="submit" name="verzenden" value="login">
    </form>
<?php
}

Dan voorkom je problemen met escapen en bovendien werkt de highlighter van je editor als het goed is dan ook weer voor HTML zodat je minder snel fouten maakt. :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 19-08 08:24

PowerSp00n

There is no spoon

PHP:
1
if($_COOKIE['gebruikersnaam'] != $adminnaam && $_COOKIE['wachtwoord'] != $password)


Dus als ik alleen de gebruikersnaam goed heb dan ben ik ingelogd? :X

[edit] En ik zou nog even een exit; of whatever achter het form doen...

[ Voor 39% gewijzigd door PowerSp00n op 05-12-2004 13:29 ]


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
PowerSp00n: Ik heb het geprobeerd alleen met de gebruikersnaam, maar dan geeft hij netjes aan dat het een foute login is.

Bedoel je met een exit dat ik na de form
code:
1
die()
plaats ?

Acties:
  • 0 Henk 'm!

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 19-08 08:24

PowerSp00n

There is no spoon

Bij het inloggen misschien wel, daar doe je het goed. Als gebruikersnaam is "iets" _EN_ wachtwoord is "bla" dan log je in. Maar waar je de cookie checked, als gebruikersnaam niet is "iets" _EN_ wachtwoord niet is "bla" dan ben je niet ingelogd. Je bent dan wel ingelogd als je gebruikersnaam goed is en je wachtwoord fout, of als je gebruikersnaam fout is en je wachtwoord goed. Dit moet dus een of (OR, ||) zijn, gebruikersnaam is niet 'bla' _OF_ wachtwoord is niet 'bla'.
Pagina: 1