Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Dubbele session_start

Pagina: 1
Acties:
  • 247 views

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
Hoi,

Ik ben bezig een inlogsysteem te bouwen aan de hand van dit boek. Nu heb ik de code volgens mij goed gevolgd, maar ik krijg toch nog een warning, namelijk de volgende:
code:
1
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Users/carelcoenraad/Sites/Aegeev4/includes/php/header.php:4) in /Users/carelcoenraad/Sites/Aegeev4/includes/php/functions.php on line 71


Ik heb de code goed doorgespit op fouten, maar ik kan er echt niet achter komen waarom hij die melding geeft. Naar mijn inzicht wordt de sessie pas gestart bij het gebruik van de desbetreffende functie. Mijn php code ziet er als volgt uit:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function userIsLoggedIn() {
    if (isset($_POST['action']) and $_POST['action'] == 'login') {
        if (!isset($_POST['inloggenEmail']) or $_POST['inloggenEmail'] == '' or !isset($_POST['inloggenWachtwoord']) or $_POST['inloggenWachtwoord'] == '') {
            $GLOBALS['loginError'] = '<span style="color: #ff0000; font-weight: bold;">Vul beide velden in</span>';
            return FALSE;
        }
        
        $password = md5($_POST['inloggenWachtwoord']);
        
        if (userExists($_POST['inloggenEmail'], $password)) {
            session_start();
            $_SESSION['loggedIn'] = TRUE;
            $_SESSION['email'] = $_POST['inloggenEmail'];
            $_SESSION['password'] = $password;
            return TRUE;
        }
        
        else {
            session_start();
            unset($_SESSION['loggedIn']);
            unset($_SESSION['email']);
            unset($_SESSION['password']);
            $GLOBALS['loginError'] = '<span style="color: #ff0000; font-weight: bold;">De inlog gegevens kloppen niet</span>';
            return FALSE;
        }
    }
    
    if (isset($_POST['action']) and $_POST['action'] == 'logout') {
        session_start();
        unset($_SESSION['loggedIn']);
        unset($_SESSION['email']);
        unset($_SESSION['password']);
        header('Location: index.php');
        exit();
    }
            
    session_start();
    if (isset($_SESSION['loggedIn'])) {
        return userExists($_SESSION['email'], $_SESSION['password']);
    }
}

function userExists($email, $wachtwoord) {
    global $link;
    $email = mysqli_real_escape_string($link, $email);
    $password = mysqli_real_escape_string($link, $wachtwoord);
    
    $sql = "SELECT COUNT(*) FROM leden WHERE email = '$email' AND wachtwoord = '$wachtwoord'";
    $result = mysqli_query($link, $sql);
    if (!$result) {
        $error = 'Error searching for user.';
        include 'includes/error.html.php';
        exit();
    }
    
    $row = mysqli_fetch_array($result);
    
    if ($row[0] > 0) {
        return TRUE;
    }
    else {
        return FALSE;
    }
}


Ik heb nog geprobeerd het gedeelte van lijn 37 te verplaatsen binnen de if (isset) van lijn 2. Dit verhelpt in principe de fout, maar wanneer ik dan inlog krijg ik de volgende fout:
code:
1
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Users/carelcoenraad/Sites/Aegeev4/includes/php/header.php:4) in /Users/carelcoenraad/Sites/Aegeev4/includes/php/functions.php on line 53


Kortom, er gaat ergens iets mis met de session_start(); van lijn 37, maar ik kom er nou niet achter wat het precies is.

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


  • disjfa
  • Registratie: April 2001
  • Laatst online: 04-11 11:05

disjfa

be

Roep gewoon een keer session start aan in het begin van je script ipv dat 23 keer aan te zetten :?

Dus
PHP:
1
2
3
<?
session_start();
if(....etc etc

disjfa - disj·fa (meneer)
disjfa.nl


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 16:25
session_start() hoort helemaal bovenaan je PHP document te staan.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

bekok schreef op woensdag 08 september 2010 @ 23:43:
Kortom, er gaat ergens iets mis met de session_start(); van lijn 37, maar ik kom er nou niet achter wat het precies is.
Dan moet je de foutmelding lezen. Je output data vóór een aanroep van session_start().

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:23

MueR

Admin Devschuur® & Discord

is niet lief

Je was nog niet op het idee gekomen die foutmelding eens in Google of de GoT Search te gooien?

Anyone who gets in between me and my morning coffee should be insecure.


Verwijderd

Wat is hier niet duidelijk aan?

output started at /Users/carelcoenraad/Sites/Aegeev4/includes/php/header.php:4

Je print/echo daar iets voordat je session_start aanroept. Je moet eerst session_start uitvoeren voordat je iets kunt uitvoeren. Doe je het andersom dat krijg je deze fout.

session_start hoeft natuurlijk niet in het begin van je PHP script te staan.

[ Voor 35% gewijzigd door Verwijderd op 09-09-2010 00:15 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Sorry, maar die foutmelding in Google of in de GoT search stoppen geeft toch echt alle antwoorden die je nodig hebt. Je mag niets outputten vóór je session_start en de oplossing daarvoor is session_start bovenaan te zetten. Eenmalig.

Omdat je daar dus ook zelf uit had kunnen komen gaat dit topic dicht.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.