Problemen met het maken van een sessie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stan Peters

Stan Peters

21/11/2013 09:00:03
Quote Anchor link
Hallo,

Ik ben net begonnen met php en probeer een sessie te maken.
Ik heb al op veel sites gekeken maar het werkt gewoon niet.

Dit is mijn script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
37
38
39
40
41
<html>
    <head>
        <title>Opdracht 44 inloggen</title>
    </head>
    <body>
        <?php
            $gebruikersnaam
= $_POST["gebruikersnaam"];
            $wachtwoord = $_POST["wachtwoord"];
            if (!$gebruikersnaam || !$wachtwoord)
                {

        ?>

                    <p><b>Welkom! Maak een random gebruikersnaam en wachtwoord. Ze worden niet opgeslagen dus boeiend!</b></p>
                    
                    <table border="0">
                        <form name="rekenmachine" method="post" action="Opdracht_44a.php">
                            <tr><td>Gebruikersnaam:</td>
                            <td><input type = "text" size="25" name = "gebruikersnaam"></td></tr>
                    
                            <tr><td>Wachtwoord:</td>
                            <td><input type = "password" size="25" name = "wachtwoord"></td></tr>
                
                            <tr><td><input type = "submit" value = "Inloggen"></td></tr>
                        </form>
                    </table>
        <?php
                }
            
            else
                {
                    session_start();
                    $_SERVER['gebruikersnaam'];
                    echo "Klik hier om door te gaan $gebruikersnaam";
        ?>

                    <form name="jwz" method="post" action="Opdracht_44b.php">
                    <input type="submit" value="Naar geheime pagina...">
                    </form>
        <?php
                }
        ?>

    </body>
</html>


Het 2e script is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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

<html>
    <head>
        <title>Opdracht 44 geheim</title>
    </head>
    <body>
        <?php
            session_set_cookie_params(0, '/', 'stan.graafhuyncollege.nl');
            session_start();
            if ($_SERVER['gebruikersnaam'])
            {

            echo"Heey $gebruikersnaam! Welkom op de beveiligde pagina! <br />
                 Uw gebruikersnaam is $gebruikersnaam. <br />
                 En uw wachtwoord is $wachtwoord. <br />
                 U kunt zich hier afmelden: <br />"
;
            }

            
            else
            {
                echo"u bent niet ingelogd";
            }

        ?>

            <form name="jwz" method="post" action="Opdracht_44a.php">
                <input type="submit" value="AFMELDEN <?php echo $gebruikersnaam; ?>">
            </form>
    </body>
</html>


Jammer genoeg werkt dit script niet.
Kan iemand mij misschien helpen?

Mvg,
Stan Peters
Gewijzigd op 21/11/2013 14:59:55 door Stan Peters
 
PHP hulp

PHP hulp

14/06/2024 18:26:37
 
- Ariën  -
Beheerder

- Ariën -

21/11/2013 09:26:04
Quote Anchor link
Edit:
Zou je a.u.b. je code tussen code-tags kunnen plaatsen door je bericht te bewerken? Dat maakt het overzichtelijker in het topic. Lees hier hoe dat moet.
Alvast bedankt.




Toevoeging op 21/11/2013 09:28:25:

Verder wat opmerkingen:
- Plaats start_session(); helemaal bovenaan tussen PHP.-tag, VOORDAT de HTML begint.
- Wat wil je bereiken met $_SERVER['gebruikersnaam']
 
Joakim Broden

Joakim Broden

21/11/2013 09:59:08
Quote Anchor link
PHP.net
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
    Note:
    To use cookie-based sessions, session_start() must be called before outputing anything to the browser.
 
Michael -

Michael -

21/11/2013 10:06:52
Quote Anchor link
Aanvulling op Aar
- Variabelen buiten quotes.
- Geen userinput vertrouwen. $_POST en $_GET altijd gebruiken i.c.m htmlentities, htmlspecialchars, mysqli_real_escape_string, of andere functies die voorkomen dat code kan worden uitgevoerd.

Voorbeeldje
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start(); // Altijd bovenaan de pagina

if($_SERVER['REQUEST_METHOD'] == 'POST'){ // Als er wordt gepost
    $_SESSION['gebruikersnaam'] = htmlentities($_POST['gebruikersnaam'], ENT_QUOTES, "UTF-8");
    echo 'Welkom ' . $_SESSION['gebruikersnaam'] . ' op de beveiligde pagina.';
}

?>

<form method="POST">
<input type="text" name="gebruikersnaam" />
<button>Post</button>
</form>

typefouten voorbehouden.
 
Stan Peters

Stan Peters

21/11/2013 14:53:45
Quote Anchor link
- Aar - op 21/11/2013 09:26:04:

Verder wat opmerkingen:
- Wat wil je bereiken met $_SERVER['gebruikersnaam']


Ik wil daarmee de variabele opslaan. $gebruikersnaam
 
- SanThe -

- SanThe -

21/11/2013 14:56:14
Quote Anchor link
Deze $_SERVER['gebruikersnaam'] zal niet bestaan.
Je bedoelt waarschijnlijk $_POST['gebruikersnaam'].
 
Ozzie PHP

Ozzie PHP

21/11/2013 14:57:11
Quote Anchor link
Dat doe je niet in de $_SERVER array, maar in de $_SESSION array. En daarnaast sla je helemaal niks op.

$_SESSION['gebruikersnaam'] = 'pietje puk';

Zo ken je een waarde toe aan een variabele.
 
Stan Peters

Stan Peters

21/11/2013 15:03:17
Quote Anchor link
Ik wil alleen dat hij een sessie begint als de gebruikersnaam en wachtwoord zijn ingevuld. Moet je session_start(); dan ook boven <html> zetten?

Toevoeging op 21/11/2013 15:06:15:

Ozzie PHP op 21/11/2013 14:57:11:
Dat doe je niet in de $_SERVER array, maar in de $_SESSION array. En daarnaast sla je helemaal niks op.

$_SESSION['gebruikersnaam'] = 'pietje puk';

Zo ken je een waarde toe aan een variabele.


Met $_SESSION geeft hij bij mijn 2e script nog steeds aan dat je niet bent aangemeld.
 
Kris Peeters

Kris Peeters

21/11/2013 15:22:48
Quote Anchor link
Stan Peters op 21/11/2013 15:03:17:
Ik wil alleen dat hij een sessie begint als de gebruikersnaam en wachtwoord zijn ingevuld. Moet je session_start(); dan ook boven <html> zetten?


Laat me antwoorden op een andere manier dan je (waarschijnlijk) verwacht.
Je moet altijd proberen de php-logica te scheiden van de HTML.

Je hebt de neiging om eerst <html> ... <body> te printen, en daarna ga je nog aan data-verwerking doen.
Dat moet je niet doen.

Begin altijd eerst met de php-logica. Zet die bovenaan het .php bestand.
Pas wanneer alle logica is gepasseerd, wanneer alle data is verwerkt, ... begin je <html> te printen.

Dus, eigenlijk zou je geen if's meer mogen zien onder de code waar <html> staat.

-------

Het eenvoudigste is dat je session_start() zet helmemaal bovenaan de code.
Dus ook voor de mensen wiens login nog niet gedaan is.
Het stoort niet dat session_start() al is uitgevoerd.
 
Dos Moonen

Dos Moonen

21/11/2013 15:34:12
Quote Anchor link
Begin je .php bestanden voorlopig altijd met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

// hier andere dingen die je voor output wilt hebben, zoals session_start()

?>


Zo zal PHP hoort de kleinste fout meteen in je gezicht gooien. Uiteindelijk, als je script klaar en goed getest is, zal PHP dus geen fouten meer opmerken en kun je die twee regels weghalen.

Het geaccepteerde antwoord voor http://stackoverflow.com/questions/8028957/headers-already-sent-by-php legt goed uit waarom session_start() boven de <html> moet komen.
Ik weet dat het veel info is en er intimiderend uit kan zien, maar neem de tijd om het rustig door te lezen. Meer weten over hoe het HTTP protocol werkt is erg handig.

Verder stel ik voor dat je op beide pagina's ergens var_dump($_SESSION); plaatst tijdens het debuggen.
 
Stan Peters

Stan Peters

21/11/2013 15:34:50
Quote Anchor link
Moet je trouwens andere sessies doen wanneer je een subdomein bent?
 
Dos Moonen

Dos Moonen

21/11/2013 16:01:52
Quote Anchor link
http://php.net/manual/en/function.session-set-cookie-params.php

Als je met session_set_cookie_params() het domein instelt op '.example.com' zal de cookie verstuurt worden voor elk subdomein van example.com. Als je het instelt op 'miauw.example.com' zal die cookie niet verstuurt naar bijvoorbeeld 'woef.example.com'.
 
Stan Peters

Stan Peters

21/11/2013 19:28:36
Quote Anchor link
Ik heb alles geprobeerd wat jullie zeiden, maar het werkt nog steeds niet.
Is er misschien iemand die een oplossing weet?
 
Dos Moonen

Dos Moonen

21/11/2013 21:04:09
Quote Anchor link
En waar kunnen wij dat alles zien om te kijken wat je nou fout doet?
 
Stan Peters

Stan Peters

22/11/2013 11:10:00
Quote Anchor link
Op dit moment is dit mijn script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
37
38
39
40
41
42
43
44
45
46
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');

            $gebruikersnaam = $_POST["gebruikersnaam"];
            $wachtwoord = $_POST["wachtwoord"];
            if (!$gebruikersnaam || !$wachtwoord)
                {

?>

<html>
    <head>
        <title>Opdracht 44 inloggen</title>
    </head>
    <body>

                    <p><b>Welkom! Maak een random gebruikersnaam en wachtwoord. Ze worden niet opgeslagen dus boeiend!</b></p>
                    
                    <table border="0">
                        <form name="rekenmachine" method="post" action="Opdracht_44a.php">
                            <tr><td>Gebruikersnaam:</td>
                            <td><input type = "text" size="25" name = "gebruikersnaam"></td></tr>
                    
                            <tr><td>Wachtwoord:</td>
                            <td><input type = "password" size="25" name = "wachtwoord"></td></tr>
                
                            <tr><td><input type = "submit" value = "Inloggen"></td></tr>
                        </form>
                    </table>
        <?php
                }
            
            else
                {
                    $_SESSION['gebruikersnaam'] = $gebruikersnaam;
                    echo "Klik hier om door te gaan $gebruikersnaam";
        ?>

                    <form name="jwz" method="post" action="Opdracht_44b.php">
                    <input type="submit" value="Naar geheime pagina...">
                    </form>

    </body>
</html>
        <?php
                }
        ?>


En mijn 2e script is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');

            if ($_SESSION['gebruikersnaam'])
            {

            echo"Heey $gebruikersnaam! Welkom op de beveiligde pagina! <br />
                 Uw gebruikersnaam is $gebruikersnaam. <br />
                 En uw wachtwoord is $wachtwoord. <br />
                 U kunt zich hier afmelden: <br />"
;
            }

            
            else
            {
                echo"u bent niet ingelogd";
            
?>

<html>
    <head>
        <title>Opdracht 44 geheim</title>
    </head>
    <body>
            <form name="jwz" method="post" action="Opdracht_44a.php">
                <input type="submit" value="AFMELDEN <?php echo $gebruikersnaam; ?>">
            </form>
    </body>
</html>
<?php
            }
?>


Script 2 :hij laat nu wel de if zien, maar de $gebruikersnaam doet het niet. Als ik in plaats van $gebruikersnaam, $_SESSION['gebruikersnaam'] neer zet, doet pagina 44b (2e script) het niet meer.
Gewijzigd op 22/11/2013 11:30:07 door Stan Peters
 
Kris Peeters

Kris Peeters

22/11/2013 12:29:36
Quote Anchor link
Kijk even mee naar mijn versie.

Ben je hier iets mee?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');

// eerst kijken of er een $_POST in de lucht hangt
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // hier controleer jij dus of de gegevens overeen komen met wat in de DB staat.  Dit doe ik even niet
  $_SESSION['gebruikersnaam'] = $_POST["gebruikersnaam"];
}


// kijken of de session variabelen gezet zijn
if (!isset($_SESSION['gebruikersnaam'])) {
  // geen login in de sessie gevonden
  // zie heredoc notation

  echo <<<HTML
<html>
    <head>
        <title>Opdracht 44 inloggen</title>
    </head>
    <body>
      <p><b>Welkom! Maak een random gebruikersnaam en wachtwoord. Ze worden niet opgeslagen, dus boeiend!</b></p>
      <table border="0">
          <form name="rekenmachine" method="post" action="">
              <tr><td>Gebruikersnaam:</td>
              <td><input type = "text" size="25" name = "gebruikersnaam"></td></tr>
              <tr><td>Wachtwoord:</td>
              <td><input type = "password" size="25" name = "wachtwoord"></td></tr>
              <tr><td><input type = "submit" value = "Inloggen"></td></tr>
          </form>
      </table>
    </body>
</html>
HTML
;
}

else {
  // login in de sessie gevonden
  // Met andere woorden, vanaf hier kan je al de geheime pagina's tonen die je wil.
  
  // laat me hier even een basis navigatie toevoegen, dus op basis van de URL

  switch(isset($_GET['p']) ? $_GET['p'] : '') {
    default:

      echo <<<HTML
  <a href="?p=welcome">Klik hier</a> om door te gaan, $_SESSION[gebruikersnaam]
  <br><br><br><a href="?p=logout">Uitloggen</a>
HTML
;
    break;
    case
'welcome':
      echo 'Welkom op de geheime pagina van Stan.  <br>Het doel van het leven is 42
      <br><br><br><a href="?p=logout">Uitloggen</a>'
;
    break;
    case
'logout':
      unset($_SESSION['gebruikersnaam']);
      header('location: ?p=');
    break;
  }
}

?>
 
Stan Peters

Stan Peters

06/12/2013 10:25:30
Quote Anchor link
Hij doet het bedankt iedereen!!!!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.