[php] Controle op session werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is de code van mijn eerste pagina;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//1e pagina
<?php 
    session_start(); 
?>
<form action="mail.php" method="post">
Username<br>
<INPUT type="text" name="name" size="16%"><br>
Password<br>
INPUT type="password" name="pw" size="16%"><br>
<INPUT type="submit" name="go" value="View Mail">
</form>
<?php
if($_POST["go"]){
$_SESSION["username"]=$_POST['name'];
$_SESSION["password"]=$_POST['pw'];
header("Location:mail.php");
}

?>


en dan op de tweede pagina wordt wat gedaan met de $_SESSION:

PHP:
1
2
3
4
5
6
7
8
<?php 
    session_start(); 
    if(!isset($_SESSION["username"])){
    header("Location:index.php");
    } else {
 //meuk
}
?>


Maar als ik dit thuis draai dan word ik telkens terug gestuurd naar de header (index.php). Oook als ik een name en pw invul...?? Dit begrijp ik niet, wordt de session neit geregistreerd?
PS: Ik gebruik thuis enkele quotes, maar als ik ze hier post dan krijg ik iets vaags te zien...

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Nu online

Bosmonster

*zucht*

Draai je thuis apache onder windows? en heb je wel je sessie-dir enzo ingesteld?

Acties:
  • 0 Henk 'm!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Je begint goed, maar je maakt het niet helemaal netjes af ;)

Als eerste doe je idd session start(), daarna lees je de geposte waarden uit. Maar daarna moet je de variabelen in de sessie registreren en vervolgens een waarde geven. Ongeveer zo:
PHP:
1
2
3
4
5
6
7
session_start();

$username = $_POST['username'];

session_register('username');

$_SESSION['username'] = $username;


Vervolgens kan je in de tweede pagina die je aanroept de waarden als volgt uitlezen:
PHP:
1
2
3
4
5
session_start();
session_register('username');

//de waarde van username is dan:
$username = $_SESSION['username'];


Ik heb me hier al een tijdje niet meer mee bezig gehouden. Dit werkt opzich wel, maar ik had gehoord dat deze manier tegenwoordig niet meer 'mag' omdat er nu een andere manier hiervoor is?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik draai thuis XP met IIS. Ik het onder de php dir een tmp dir aangemaakt. En deze in de php.ini aangepast.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:12

crisp

Devver

Pixelated

Blorgg schreef op 20 October 2003 @ 17:21:
Je begint goed, maar je maakt het niet helemaal netjes af ;)

Als eerste doe je idd session start(), daarna lees je de geposte waarden uit. Maar daarna moet je de variabelen in de sessie registreren en vervolgens een waarde geven. Ongeveer zo:
[...]
Ga jij eens gauw de manual lezen:

php.net:
...If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.
en
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
Verwijderd schreef op 20 October 2003 @ 17:30:
Ik draai thuis XP met IIS. Ik het onder de php dir een tmp dir aangemaakt. En deze in de php.ini aangepast.
heb je daar wel een volledig pad in opgegeven?

[ Voor 27% gewijzigd door crisp op 20-10-2003 17:38 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

probeer het eens om met
PHP:
1
$variabele = $_REQUEST["variabele"];
variabelen op te halen

[ Voor 8% gewijzigd door Verwijderd op 20-10-2003 17:42 . Reden: quotes.. ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is een stuk uit php.ini
Dit staat wel goed volgens mij...

[Session]
; Handler used to store/retrieve data.
session.save_handler = "files"

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
; As of PHP 4.0.1, you can define the path as:
; session.save_path = "N;/path"
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
; NOTE 1: PHP will not create this directory structure automatically.
; You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
; use subdirectories for session storage
session.save_path = c:\php\tmp

Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Mis ik nou iets of stuur je een 'location' header nadat je output gestart is?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//1e pagina 
<?php 
    session_start(); 
?> 
<form action="mail.php" method="post"> 
Username<br> 
<INPUT type="text" name="name" size="16%"><br> 
Password<br> 
INPUT type="password" name="pw" size="16%"><br> 
<INPUT type="submit" name="go" value="View Mail"> 
</form> 
<?php 
if($_POST["go"]){ 
$_SESSION["username"]=$_POST['name']; 
$_SESSION["password"]=$_POST['pw']; 
header("Location:mail.php"); 
} 

?> 
Je begint HTML te ratelen en daarna doe je een header() call. Dat gaat iig fout...

offtopic:
Hoe berekent tweakers het percentage dat het bericht veranderd is? Ik had een typo hier: 'raleten' en veranderde dat naar 'ratelen', das 2 tekens. Hij geeft wel gelijk 24% aan :?

[ Voor 57% gewijzigd door Jurgle op 20-10-2003 17:50 ]

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik het if-statement weg laat kom ik gewoon op de volgende pagina(mail.php). Dus header verstuurd ie gewoon. Misschien is het niet zoals het hoort maar hij geeft geen fout.

Ik ben net begonnen dus let effe niet op de schoonheids fouten...

Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Probeer t eens zo:

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
//-- bestand 1: index.php --//
<?php 
session_start(); 

if($_POST['go'])
{ 
   $_SESSION['username'] = $_POST['name']; 
   $_SESSION['password'] = $_POST['pw']; 
   header('Location: mail.php');
   die();
} 
?> 
<form action="index.php" method="post"> 
Username<br> 
<INPUT type="text" name="name" size="16"><br> 
Password<br> 
<INPUT type="password" name="pw" size="16"><br> 
<INPUT type="submit" name="go" value="View Mail"> 
</form> 

//-- bestand 2: mail.php --//
<?php 
session_start(); 

if(!isset($_SESSION['username']))
{
   header("Location: index.php");
   die();
}
else
{ 
   //meuk 
} 
?>


Je zou toch eens op schoonheid moeten letten:
- Je target van de form was mail.php, dan worden de _POST waarden natuurlijk nooit in de sessie gezet.
- Je had een INPUT> tag ipv <INPUT>.
- Tussen 'Location:' en de bestandsnaam moet een spatie.
- Voordat je header() gebruikt mag er nog geen output verstuurd zijn.
- Doe een die() of exit() na een header('Location:...') call

[ Voor 39% gewijzigd door Jurgle op 20-10-2003 18:21 ]

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm bedank voor de les, ik zal er op letten.

Ik heb wel een vraag:
Als de target in mijn form gedefineerd is heb ik eigenlijk toch geen header call meer nodig. Ik heb een controlle of er op de submit knop is gedrukt, als dat TRUE is dan neemt ie toch de $_POST vars mee, en moet ie toch naar mail.php gaan??
Of begrijp ik er nu niks meer van...;)

Acties:
  • 0 Henk 'm!

  • nxt
  • Registratie: November 2001
  • Laatst online: 24-08 15:34

nxt

Verwijderd schreef op 20 October 2003 @ 18:55:
Hmm bedank voor de les, ik zal er op letten.

Ik heb wel een vraag:
Als de target in mijn form gedefineerd is heb ik eigenlijk toch geen header call meer nodig. Ik heb een controlle of er op de submit knop is gedrukt,
ja en nee
als je doet
action="mail.php"
dan heb je inderdaad die header niet nodig
maar... dan moet je de sessionvariabelen in de file mail.php opslaan (m.a.w. dat if-statement dat begint met if($_POST["go"]) )

want je gaat dan zodra er op de submit knop gedrukt wordt direct naar mail.php
en die controle die onderaan je eerste pagina staat zal dus ook niet uitgevoerd worden.

een ander alternatief is (zoals Jurgle al noemt) in je eerste pagina posten naar dezelfde pagina.
dan zal dat stukje binnen 't if-statement wel uitgevoerd worden, en zijn de session variabelen in mail.php bekend.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:12

crisp

Devver

Pixelated

PHP:
1
if($_POST["go"])


is eigenlijk ook geen goede manier om te checken of je form gepost wordt. Ten eerste levert dit je een notice op als er geen form gepost is, en ten tweede stuurt IE vaak de waarde van de submitbutton niet mee als je bv met enter een formulier submit. Ik vraag zelf altijd de request method uit:

PHP:
1
if ($_SERVER['REQUEST_METHOD'] == 'POST')

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou, ik heb alle aanpassingen gedaan wat jullie me hebben geadviseerd. Maar nog steeds de controlle met isset altijd TRUE.
PHP:
1
2
3
4
5
6
7
<?php 
    session_start(); 
    if(!isset($_SESSION['username'])){
    header("Location: index.php");
    die();
    } else { //meuk }
?>

Ik heb nu ipv !isset() empty() gebruikt, en voila....dat werkt wel.

Iid geval bedank voor alle hulp... :*) _/-\o_

[ Voor 12% gewijzigd door Verwijderd op 21-10-2003 01:18 ]

Pagina: 1