[PHP] Unset van session

Pagina: 1
Acties:
  • 675 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • doak
  • Registratie: Oktober 2001
  • Niet online
Ik zit met een eigenaardig probleem, als ik de sessie unset dan wordt het formulier weer geladen. Terwijl dat na een submit een melding moet komen dat de gebruiker succesvol is geregistreerd. Ik zal proberen in de comments mijn probleem te verduidelijken.

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
/*
File register.php
*/
<?php 

if($session->logged_in){
   echo "<h3>Geregistreerd</h3>";
   echo "<p>He <b>$session->username</b>, je bent al geregistreerd."
       ."<a href=" .$_SERVER["PHP_SELF"]. ">Home</a>.</p>";
}

else if(isset($_SESSION['regsuccess'])){
   /* Registratie is goed gegaan */
   if($_SESSION['regsuccess']){
          echo "<h3>Geregistreerd!</h3>";
          echo "<p>Bedankt <b>".$_SESSION['reguname']." </b> voor je registratie</b>, je gegevens zijn toegevoegd aan de database, "
              ."om in te loggen klik op de link in de mail die zojuist verzonden is.</p>"
              ."<br /><a href=" .$_SERVER["PHP_SELF"]. ">Home</a>";
   }
   /* Registratie mislukt */
   else{
          echo "<h3>Registratie mislukt</h3>";
          echo "<p>Helaas, er is wat mis gegaan met het registreren van jou account <b>".$_SESSION['reguname']."</b>, "
              ."<br>Probeer het later nog eens</p>";
   }
   unset($_SESSION['regsuccess']); 
/* Hier gaat het fout, de melding van succesvol reg is niet zichtbaar en het formulier komt weer in beeld.
 Wat ik wil is dat na de melding succesvol geregd de session unset wordt 
 waardoor je de volgende keer weer het formulier ziet. Als ik unset weglaat dan zal ik altijd, zolang de sessie bestaat, zien dat ik geregistreerd ben. */
   unset($_SESSION['reguname']);
}
 
 
 
/**
Het formulier
**/
else{

if($form->num_errors > 0){
   echo "<td><font size=\"2\" color=\"#ff0000\">".$form->num_errors." error(s) gevonden</font></td>";
}
?>

// html opmaak van formulier etc. te lang en onbelangrijk om te posten
    

<?

}


/*
File process.php
Het formulier wordt gecontroleerd en als alles in de database zit komt het terug met return value 0
de header roept dan het script hierboven register.php aan.
*/
      if($rwaarde  == 0){
      //    echo "Goed gegaan";
         $_SESSION['reguname'] = $_POST['voornaam'];
         $_SESSION['regsuccess'] = true;
         header("Location: ".$session->referrer);
      }
?>

[ Voor 2% gewijzigd door doak op 13-12-2007 23:36 . Reden: Verduidelijken ]


  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 18-09 21:53

Tux

Waarom unset je je session variabelen eigenlijk? Ik zou eens je $_SESSION print_r()'en voordat je checks gaat doen of de variabelen uberhaupt geset zijn. Dit zou namelijk niet raar mogen doen aangezien je pas unset() nadat je er een if op gedaan hebt.

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


  • Kwastie
  • Registratie: April 2005
  • Laatst online: 19-09 10:42

Kwastie

Awesomeness

PHP_SELF is gevaarlijk niet gebruiken

When I get sad i stop being sad and be awesome instead


  • doak
  • Registratie: Oktober 2001
  • Niet online
ik denk zelf dat dit: if(isset($_SESSION['regsuccess'])){ meteen vernietigd is als die unset hierbinnen plaats vindt waardoor het formulier getoond wordt.

print_r($_SESSION) laat een 1 true zien als ik geen unset gebruik. Dan is de registratie melding ook in beeld. Maar met die unset krijg je meteen weer het forumlier te zien. Waarom ik de session unset is omdat als ik weer eens op de link klik om te registreren ik gewoon het formulier wil zien en niet de melding dat de registratie gelukt is. Anyway bedankt voor de snelle reply's en hulp, zal wel wat gigantisch fout doen 8)7

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Staat het ook echt in deze volgorde??? en zonder output buffering???

Want dan krijg de situatie dat als regsucces niet geset is ( na posten van formulier ) dan wordt eerst het formulier getoond en daarna wordt een location header gestuurd, maar deze wordt genegeerd omdat er al output is geweest.

waar probeer je trouwens de _SESSION te printen, voor of na regel 58 in bovenstaande code? Daarna is de waarde inderdaad 1, maar je location header werkt dan gewoon niet meer. Daarvoor zou het volgens mij 0 moeten zijn...

  • doak
  • Registratie: Oktober 2001
  • Niet online
Het eerste deel (met formulier) is een include pagina genaamd register.php. Wordt geinclude in het content gedeelte op start.php
De register.php submit naar phpself in mijn geval nu start.php
Na het aanmaken van een paar classes (waar geen headers worden verzonden) in start.php include ik een file process.php waar dus dat laatste stukje code instaat.

start.php
-- aanmaken classes
-- include process.php = kijken of formulier verstuurd is, data in db zetten, header naar start?page=register
-- menu
-- content > register.php > submit formulier naar start.php OF laat 1x melding zien van registratie
-- footer

Bij process.php wordt dus die sessie aangemaakt dat het allemaal gelukt is, na een header location naar register.php moet dus 1x de berichtgeving komen dat het gelukt is. Als ik dus weer zou willen registreren moet ik het formulier krijgen. Dit werkt niet, ik krijg meteen het forumulier door die mega :'( >:) :| unset functie.
Ik print session in register.php dus dat is na die header location, output_buffering staat uit

Nog wat getest
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   if($_SESSION['regsuccess']==='gelukt'){ // voor de duidelijkheid effe zonder boolean gewerkt
          echo "<h3>Geregistreerd!</h3>";
          echo "<p>Bedankt <b>".$_SESSION['reguname']." </b> voor je registratie</b>, je gegevens zijn toegevoegd aan de database, "
              ."om in te loggen klik op de link in de mail die zojuist verzonden is.</p>"
              ."<br /><a href=" .$_SERVER["PHP_SELF"]. ">Home</a>";
              //$_SESSION['regsuccess']='anderetekst'; // Als je dit zou uncommente kom je in het formulier uit en zie je de melding dus niet, ook al volgt er een exit
              exit;
   }
   elseif($_SESSION['regsuccess']==='mislukt'){
          echo "<h3>Registratie mislukt</h3>";
          echo "<p>Helaas, er is wat mis gegaan met het registreren van jou account <b>".$_SESSION['reguname']."</b>, "
              ."<br>Probeer het later nog eens</p>";
   }
else {
 // Mooi forumuliertje laten zien
}

[ Voor 31% gewijzigd door doak op 13-12-2007 23:59 . Reden: wat getest ]


Verwijderd

zal waarschijnlijk wel.. maar heb je wel in bijde files een session_start() staan? en heb je het al eens met een andere browser geprobeert? door security instellingen willen sommige bakken nog wel eens weigeren session id door naar volgende pagina door te geven.

Acties:
  • 0 Henk 'm!

  • doak
  • Registratie: Oktober 2001
  • Niet online
start.php begint met een session_start, de sessie lijkt het niet te zijn omdat ik wel zie dat hij die regsuccess doorgeeft en ook daadwerkelijk een melding kan laten zien. Alleen het unsetten heef zo'n raar effect. In andere browser precies hetzelfde.
Pagina: 1