[php] sessie slaat niet op

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
Ik snap niet wat ik fout doe of welke instelling er niet goed staat. In index.php check ik de inloggegevens van een gebruiker zodra deze kloppen leg ik deze vast is een sessie en redirect ik de gebruiker naar editWishList.php. Bij editWishList.php check ik of er in de sessie een gebruik zit. Zit deze er niet in dan redirect ik de gebruiker naar index.php. De grap is dat ik in geen waardes lijk te hebben in mijn sessie zodra ik uitkom op editWishList.php. Wat gaat er niet niet?


Index.php
PHP:
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
<?php
require_once("Includes/db.php");

$logonSuccess = true;

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (WishDB::getInstance()->verify_wisher_credentials($_POST["user"], $_POST["userpassword"]) == 1) {
        session_start();
        $_SESSION["user"] = $_POST["user"];
        header('Location: editWishList.php');
    } else {
        $logonSuccess = false;
    }
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>Title</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <form name="logon" action="index.php" method="POST" >
            Username: <input type="text" name="user"/>
            Password  <input type="password" name="userpassword"/>
            <?php
            if (!$logonSuccess)
                echo "Invalid name and/or password";
            ?>
            <input type="submit" value="Edit My Wish List"/>
        </form>
    </body>
</html>


editWishList.php
PHP:
1
2
3
4
5
6
7
8
9
<?php
session_start();
if (array_key_exists("user", $_SESSION)) {
    echo "Hello " . $_SESSION["user"];
} else {
   header('Location: index.php');
   exit;
}
?>

Acties:
  • 0 Henk 'm!

  • Spookie
  • Registratie: Mei 2007
  • Laatst online: 06-09 13:23
Bij index.php moet ook

session_start();

Acties:
  • 0 Henk 'm!

  • DaRKie
  • Registratie: December 2001
  • Laatst online: 02-09 19:08
Moet je in index.php ook niet session_start() aanroepen?

Acties:
  • 0 Henk 'm!

  • durkp
  • Registratie: Januari 2009
  • Laatst online: 03-09 21:16
In index.php

Als je daar eens
code:
1
session_start();


bovenaan zet.

Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
op regel 9 roep ik session_start al aan. Het verplaatsen naar regel 2 van session_start heeft geen effect helaas.

Acties:
  • 0 Henk 'm!

  • durkp
  • Registratie: Januari 2009
  • Laatst online: 03-09 21:16
Komen de $_POST wel goed binnen?

Heb je al nagekeken, als dat gewoon werkt?

Acties:
  • 0 Henk 'm!

  • console
  • Registratie: September 2002
  • Laatst online: 22:47
Liqued schreef op zondag 27 juni 2010 @ 11:35:
op regel 9 roep ik session_start al aan. Het verplaatsen naar regel 2 van session_start heeft geen effect helaas.
Doe eens een print_r( $_SESSION ); en kijk of er uberhaupt wel iets geset word?

Acties:
  • 0 Henk 'm!

  • joostvanpinxten
  • Registratie: Maart 2007
  • Laatst online: 03-09 12:50
Niet heel erg nuttig commentaar hierboven... Je hebt in de index.php maar een zeer minimale sessie, maar dat is hier helemaal geen probleem.

Ik heb bovenstaande code genomen en uitgevoerd (natuurlijk zonder de DB controle, die heb ik er even uitgestript) en dan krijg ik toch daadwerkelijk een sessie met daarin de index user ingesteld. editWishList.php doet het ook gewoon goed.

Welke versie van PHP gebruik je en op welk platform? Probeer het volgende eens:

PHP:
1
2
3
4
5
6
7
8
9
<?php
session_start();
if(empty($_SESSION['increment'])){
echo $_SESSION['increment'] = 1;
}else{
echo ++$_SESSION['increment'];
}

?>

Elke refresh moet dan een hoger getal opleveren en dan weet je zeker dat je sessies correct werken.

Verder is het werken met een debugger (zoals bv NuSphere PhpEd die heeft) in een geval als deze erg handig!

[ Voor 0% gewijzigd door joostvanpinxten op 27-06-2010 11:42 . Reden: ++ voor de var ipv erna ]


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
Ik heb het script van joostvanpinxten uitgevoerd. De sessie waarde blijft op 1 staan. Op http://database.orange-dragons.com/temp.php kun je de phpinfo zien.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 23:22

orf

Zorg eens dat display_errors aan staat en zet eens bovenaan je script error_reporting(E_ALL);
Dan zie je wellicht wat er niet goed gaat.

Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 10-09 23:38

Lye

Heb je al geprobeerd om error_reporting op E_STRICT te zetten? Waarschijnlijk wordt je sessie niet eens gestart dus zal daar al een fout zitten.

Acties:
  • 0 Henk 'm!

  • joostvanpinxten
  • Registratie: Maart 2007
  • Laatst online: 03-09 12:50
session.save_path is het enige dat van mijn php-configuratie (onder het kopje session dan) verschilt, hier staat bij jou /var/lib/php/session

Als je deze server zelf opgezet hebt, dan kan het zijn dat de php binary geen rechten heeft om in dat mapje te schrijven. Ik zou toch verwachten dat dat een error is, die door PHP gegooid wordt, maar voor de zekerheid even het volgende bovenaan zetten.

PHP:
1
2
3
4
<?php
ini_set('display_errors',true);
error_reporting(E_ALL | E_STRICT);
?>


@Lyle en @orf zonder display errors zie je dan alsnog niets.... en het lijkt erop dat dit een productie server is....

Verder zal je misschien wat E_NOTICE's krijgen omdat je bepaalde array-indices zomaar probeert aan te spreken, zonder dat deze geset zijn.

Overigens vind ik de empty() (of bijna equivalent de isset()) manier leesbaarder dan je constructie met array_key_exists()

[ Voor 23% gewijzigd door joostvanpinxten op 27-06-2010 11:58 . Reden: E_NOTICE verwachting.... ]


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
op http://database.orange-dragons.com/temp2.php heb ik nu het volgende script staan
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
ini_set('display_errors',true); 
error_reporting(E_ALL | E_STRICT
session_start();
if (empty($_SESSION['increment'])) {
    echo $_SESSION['increment'] = 1;
} else {
    echo++$_SESSION['increment'];
}
?>

geen foutmeldingen :?
--edit------------------------------------------------------------
ik heb hem nu aangepast met de input van joostvanpinxten en tataaaa... we hebben een foutmelding. ik ga gelijk de rechten checken. ik denk dat het komt omdat ik nu php draai in cgi modus. eens even checken hoe ik dat moet fixen.

[ Voor 35% gewijzigd door Liqued op 27-06-2010 11:58 ]


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 23:22

orf

joostvanpinxten schreef op zondag 27 juni 2010 @ 11:54:
@Lyle en @orf zonder display errors zie je dan alsnog niets.... en het lijkt erop dat dit een productie server is....
Lees mijn eerste (van 2) zinnen nog eens? :?

Acties:
  • 0 Henk 'm!

  • joostvanpinxten
  • Registratie: Maart 2007
  • Laatst online: 03-09 12:50
@orf je hebt gelijk, scuzie, te snel gelezen!

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 16:27

r0b


Acties:
  • 0 Henk 'm!

  • Lye
  • Registratie: Januari 2010
  • Laatst online: 10-09 23:38

Lye

joostvanpinxten schreef op zondag 27 juni 2010 @ 11:54:
Verder zal je misschien wat E_NOTICE's krijgen omdat je bepaalde array-indices zomaar probeert aan te spreken, zonder dat deze geset zijn.

Overigens vind ik de empty() (of bijna equivalent de isset()) manier leesbaarder dan je constructie met array_key_exists()
empty() gebruiken voor het controleren of array indices bestaan is absoluut niet aan te raden. Als de waarde die hoort bij dat element toevallig gelijk is aan 0, "0", false, null, array of een gedeclareerde class property zonder waarde krijg je dus foute resultaten. Isset daarentegen is wel te gebruiken, maar houd rekening met null-waarden.

Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
problem solved. ik heb de rechten van de sessie dir aangepast aan de "nieuwe" owner (aangezien ik geswitch ben van "apache" als gebruiker naar de cgi gebruiker).

ps. is dit een veilige manier?
Pagina: 1