[PHP] Sessievars werken, behalve via een include

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Knakker
  • Registratie: April 2000
  • Laatst online: 13-09 16:51
Ik ben bezig met een site, en ik loop tegen een probleem wat volgens mij heel eenvoudig is, maar ik kan het maar niet bedenken.

Men kan inloggen via login.php, wanneer succesvol worden sessie-variabelen ingesteld. Als men daarna op forum.php gaat rondkijken, werken de ingestelde sessie variabelen naar behoren.

Nu was ik echter mijn forum.php aan het reorganiseren (alles wat met HTML/output te maken heeft in een include bestandje stoppen), en nu werkt het niet meer. Even een voorbeeldje:

de oude forum.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php session_start();

if ($actie == "toon_topic") {
  ... standaard output, één grote HTML brei ...
  if ($login) {
    ... antwoord venster, nog meer HTML brei ...
    }    
  else {
    echo "Je moet ingelogd zijn!";
    }
  }
?>


Dit werkt naar behoren. Nu de nieuwe situatie:

forum.php
PHP:
1
2
3
4
5
6
7
8
<?php session_start();

include("forum.inc");
if ($actie == "toon_topic") {
  toon_topic($id);
  }

?>


forum.inc
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php session_start();

function toon_topic ($id) {
  ... standaard output, één grote HTML brei ...
  if ($login) {
    ... antwoord venster, nog meer HTML brei ...
    }    
  else {
    echo "Je moet ingelogd zijn!";
    }
  }


Nu is $login níet ingesteld, terwijl ie dat zonet wel was. Een extra session_start() toevoegen binnen de functie zelf heeft geen effect. Wat zie ik over het hoofd?

-- edit --
include("forum.php"); moet natuurlijk include("forum.inc"); zijn.

Geef mij maar een Warsteiner.


Acties:
  • 0 Henk 'm!

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

kvdveer

Z.O.Z.

Ook je includes moeten .php heten, anders heb je waarschijnlijk een security-probleem. Mensen kunnen dan namelijk je code inzien... Dit is trouwens niet je probleem.. ;-)

Wat denk ik wel je probleem is: In een function zijn je globale variabelen niet beschikbaar. Dit kun je op twee manieren oplossen:
Methode 1: (ranzig)
PHP:
1
2
3
4
5
6
7
8
9
10
function toon_topic ($id) {
  global $login;
  ... standaard output, één grote HTML brei ...
  if ($login) {
    ... antwoord venster, nog meer HTML brei ...
    }    
  else {
    echo "Je moet ingelogd zijn!";
    }
  }

Methode 2: (aanrader)

PHP:
1
2
3
4
5
6
7
8
9
function toon_topic ($id) {
  ... standaard output, één grote HTML brei ...
  if ($_SESSION['login']) {
    ... antwoord venster, nog meer HTML brei ...
    }    
  else {
    echo "Je moet ingelogd zijn!";
    }
  }

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Knakker
  • Registratie: April 2000
  • Laatst online: 13-09 16:51
Bedankt, dat was het inderdaad! $_SESSION['login'] deed het wel.

Ik heb overigens geen security probleem omdat .inc files hetzelfde behandeld worden als .php bestanden (dat is toch wat je bedoelt?).

Geef mij maar een Warsteiner.


Acties:
  • 0 Henk 'm!

  • DiNo!
  • Registratie: Juni 2000
  • Laatst online: 13:41
Knakker schreef op 09 november 2002 @ 15:16:
Bedankt, dat was het inderdaad! $_SESSION['login'] deed het wel.

Ik heb overigens geen security probleem omdat .inc files hetzelfde behandeld worden als .php bestanden (dat is toch wat je bedoelt?).
Ja, dat bedoeld ie. Voor de zekerheid (nieuwe server/hoster) zou je je files file.inc.php kunnen noemen.

https://github.com/atoomnetmarc/


Acties:
  • 0 Henk 'm!

  • Knakker
  • Registratie: April 2000
  • Laatst online: 13-09 16:51
DiNo7 schreef op 09 november 2002 @ 17:26:
[...]

Ja, dat bedoeld ie. Voor de zekerheid (nieuwe server/hoster) zou je je files file.inc.php kunnen noemen.
Zal ik doen; better safe than sorry. Bedankt voor de tip iig.

Geef mij maar een Warsteiner.