[php] rotte sessies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Zie dezepagina:

http://62.108.21.134/kutsessie.php

broncode:
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
<?php
session_name("kutzooi");
session_start();
if (isset($_GET['p']))
{
     // mocht er al iets in de sessie zitten, gooien we dat er eerst uit.
    if (isset($_SESSION['p']) && $_SESSION['p'] != $_GET['p'])
        unset($_SESSION['p']);
    $_SESSION['p'] = $_GET['p'];
}
elseif(!isset($_SESSION['p']))
    $_SESSION['p'] = "bla"; // default

if (isset($_GET['pt']))
{
     // als GET['pt'] leeg is en er zit al wel een waarde in de sessie, dan moeten we daar van af
    if (empty($_GET['pt']) && isset($_SESSION['pt']))
        unset($_SESSION['pt']);
    elseif (!empty($_GET['pt']))
    {
         // GET['pt'] is niet leeg

         // als wat in de sessie zit verschilt met wat er uit de url komt, unsetten we de sessie-waarde eerst
        if (isset($_SESSION['pt']) && $_SESSION['pt'] != $_GET['pt'])
            unset($_SESSION['pt']);
         // als pt niet leeg is stoppen we de waarde in de sessie
        if (!empty($_GET['pt']))
            $_SESSION['pt'] = $_GET['pt'];
    }
}
echo "<pre>";
print_r($_SESSION);
echo "</pre>\n";
?>
<html>
<head>
 <title>test kutsessie</title>
</head>

<body>

<br>

<table width="400" border="3">
<tr>
 <td valign="top">
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=">Bla</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bladibla&pt=">BladiBla</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=14">Bla 14</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=1">Bla 1</a><br>
 </td>
 <td valign="top">
    <?php
    echo (isset($_SESSION['p'])) ? "p: ".$_GET['p'] : "nog niets geklikt";
    echo "<br>\n";
    echo "<a href=\"".$_SERVER['PHP_SELF']."?iets=nogiets\">linkje</a><br>\n";
    ?>
    
 </td>
</tr>
</table>

</body>
</html>


wat er mis gaat:
Als je op BladiBla klikt, vervolgens op Bla 14 dan zie je dat er in de sessie na die laatste klik een waarde 14 in de sessie is gezet onder key pt
als je nu weer op BladiBla klikt, dan wordt die pt weer uit de sessie gegooid. Echter als je nu vervolgens op linkje klikt, dan springt ie ineens weer tevoorschijn!

Klopt m'n code niet? (ben al een uur bezig met debuggen, maar zie echt niet wat), of is m'n sessie gewoon naar de herrie?

sorry voor de vage code, maar dit zit zo ongeveer in een veel groter geheel wat ik ff na moest bouwen voor debug-purposes, had geen zin om het vreslijk netjes te doen

Acties:
  • 0 Henk 'm!

Verwijderd

Maak die if bij // mocht er al iets in de sessie zitten, gooien we dat er eerst uit.
eens wat netter met { }

Acties:
  • 0 Henk 'm!

Verwijderd

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
65
66
67
68
69
70
71
<?php
session_name("kutzooi");
session_start();
if (isset($_GET['p']))
{
     // mocht er al iets in de sessie zitten, gooien we dat er eerst uit.
    if (isset($_SESSION['p']) && $_SESSION['p'] != $_GET['p']) 
        {
            unset($_SESSION['p']);
            $_SESSION['p'] = $_GET['p'];
        }
}
elseif(!isset($_SESSION['p']))
    {
      $_SESSION['p'] = "bla";    // default
    }
if (isset($_GET['pt']))
{
     // als GET['pt'] leeg is en er zit al wel een waarde in de sessie, dan moeten we daar van af
    if (empty($_GET['pt']) && isset($_SESSION['pt'])) 
            {
                  unset($_SESSION['pt']); 
            }
    elseif (!empty($_GET['pt']))
    {
         // GET['pt'] is niet leeg

         // als wat in de sessie zit verschilt met wat er uit de url komt, unsetten we de sessie-waarde eerst
        if (isset($_SESSION['pt']) && $_SESSION['pt'] != $_GET['pt'])
            {
               unset($_SESSION['pt']); }
          // als pt niet leeg is stoppen we de waarde in de sessie
        if (!empty($_GET['pt'])) 
            {
                 $_SESSION['pt'] = $_GET['pt']; }
            }
}
echo "<pre>";
print_r($_SESSION);
echo "</pre>\n";
?>
<html>
<head>
<title>test kutsessie</title>
</head>

<body>

<br>

<table width="400" border="3">
<tr>
<td valign="top">
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=">Bla</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bladibla&pt=">BladiBla</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=14">Bla 14</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=1">Bla 1</a><br>
</td>
<td valign="top">
    <?php
    echo (isset($_SESSION['p'])) ? "p: ".$_GET['p'] : "nog niets geklikt";
    echo "<br>\n";
    echo "<a href=\"".$_SERVER['PHP_SELF']."?iets=nogiets\">linkje</a><br>\n";
    ?>
    
</td>
</tr>
</table>

</body>
</html>

Zo nog steeds?

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 29 October 2003 @ 17:16:
Maak die if bij // mocht er al iets in de sessie zitten, gooien we dat er eerst uit.
eens wat netter met { }
wat is daar niet netjes aan dan? dat mag gewoon hoor
ja, maar je heb de haakjes verkeerd gezet.

zo moeten ze staan:
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
65
66
67
68
69
70
71
72
73
74
<?php
session_name("kutzooi");
session_start();
if (isset($_GET['p']))
{
     // mocht er al iets in de sessie zitten, gooien we dat er eerst uit.
    if (isset($_SESSION['p']) && $_SESSION['p'] != $_GET['p'])
    {
        unset($_SESSION['p']);
    }
    $_SESSION['p'] = $_GET['p'];
}
elseif(!isset($_SESSION['p']))
{
    $_SESSION['p'] = "bla"; // default
}

if (isset($_GET['pt']))
{
     // als GET['pt'] leeg is en er zit al wel een waarde in de sessie, dan moeten we daar van af
    if (empty($_GET['pt']) && isset($_SESSION['pt']))
    {
        unset($_SESSION['pt']);
    }
    elseif (!empty($_GET['pt']))
    {
         // GET['pt'] is niet leeg

         // als wat in de sessie zit verschilt met wat er uit de url komt, unsetten we de sessie-waarde eerst
        if (isset($_SESSION['pt']) && $_SESSION['pt'] != $_GET['pt'])
        {
            unset($_SESSION['pt']);
        }
         // als pt niet leeg is stoppen we de waarde in de sessie
        if (!empty($_GET['pt']))
        {
            $_SESSION['pt'] = $_GET['pt'];
        }
    }
}
echo "<pre>";
print_r($_SESSION);
echo "</pre>\n";
?>
<html>
<head>
 <title>test kutsessie</title>
</head>

<body>

<br>

<table width="400" border="3">
<tr>
 <td valign="top">
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=">Bla</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bladibla&pt=">BladiBla</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=14">Bla 14</a><br>
    <a href="<?= $_SERVER['PHP_SELF']; ?>?p=bla&pt=1">Bla 1</a><br>
 </td>
 <td valign="top">
    <?php
    echo (isset($_SESSION['p'])) ? "p: ".$_GET['p'] : "nog niets geklikt";
    echo "<br>\n";
    echo "<a href=\"".$_SERVER['PHP_SELF']."?iets=nogiets\">linkje</a><br>\n";
    ?>
    
 </td>
</tr>
</table>

</body>
</html>


(probleem blijft dus bestaan......)

[ Voor 23% gewijzigd door marty op 29-10-2003 17:42 ]


Acties:
  • 0 Henk 'm!

  • Blue_Thunder_NL
  • Registratie: Februari 2000
  • Laatst online: 15-09 20:31
Unset werkt altijd maar een beetje vreemd met sessie variabelen.

Probeer ze sessie variabelen gewoon leeg te maken:
$_SESSION['bla'] = '';

Je moet dan de condities in je IF-statements ook aanpassen, dus in plaats van:
isset($_SESSION['bla']) ==> empty($_SESSION['bla'])

[ Voor 38% gewijzigd door Blue_Thunder_NL op 30-10-2003 08:08 ]

Ik wil zoveel, maar ik doe zo weinig


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Blue_Thunder_NL schreef op 30 oktober 2003 @ 08:07:
Unset werkt altijd maar een beetje vreemd met sessie variabelen.

Probeer ze sessie variabelen gewoon leeg te maken:
$_SESSION['bla'] = '';
tja...dat vind ik niet echt fijn eigenlijk. ik wil gewoon die hele key uit m'n sessie weghebben.

anyways, dit lijkt het op te lossen:

PHP:
1
unset($_SESSION['pt'], $pt);


Het zou imho niet uit moeten maken, maargoed.....
ik hou het dus maar op een rotte sessie.
Pagina: 1