[php] session_destroy destroyt niet?

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

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
Ben met sessies aan het experimenteren en heb de volgende code om user validatie te doen en te 'onthouden' dat iemand is ingelogd.
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
75
76
77
78
79
80
<?
function Check_Validation($ID) {
/* Check to see if the requested Directory requires validation */
/* Returns 0 for no validation and 1 for Validation */

        $Validation_Query="SELECT * FROM Directory WHERE ID=$ID";
        $Validation_Result=mysql_query($Validation_Query)
                or die("Query Failed - Validation Query: $Validation_Query");
        $Validation_Total=mysql_num_rows($Validation_Result);
        if ( $Validation_Total == 0 ) {
                die("Invalid Directory ID");
        }
        else {
                $Validation_Line=mysql_fetch_row($Validation_Result);
                $Validation=$Validation_Line[3];
        }
        return $Validation;
}

function Validate() {
        global  $PHP_AUTH_USER,
                $PHP_AUTH_PW,
                $LoggedIn;

        // Check to see if $PHP_AUTH_USER already contains info
        if (!isset($PHP_AUTH_USER)) {

                // If empty, send header causing dialog box to appear
                header('WWW-Authenticate: Basic realm="My Private Stuff"');
                header('HTTP/1.0 401 Unauthorized');
                exit;

        } else if (isset($PHP_AUTH_USER)) {

                // If non-empty, check the database for matches
                // Formulate the query
                $sql = "SELECT * FROM Users WHERE UserName='$PHP_AUTH_USER' and Password='$PHP_AUTH_PW'";

                // Execute the query and put results in $result
                $result = mysql_query($sql);

                // Get number of rows in $result. 0 if invalid, 1 if valid.
                $num = mysql_numrows($result);

                if ($num != "0") {
                        session_start();
                        if (!$PHPSESSID) {
                                $LoggedIn=1;
                                session_register('LoggedIn');
                        } else if ( !$LoggedIn ) {
                                $LoggedIn=1;
                                session_register('LoggedIn');
                        }
                } else {        
                        header('WWW-Authenticate: Basic realm="My Private Stuff"');
                        header('HTTP/1.0 401 Unauthorized');
                        echo 'Authorization Required.';
                        exit;
               }
        } 
}

/* Main */
$Database=mysql_connect();
mysql_select_db("Files");

/* Verify if asked for ID */
if (empty($Dir)){
        die ("ERROR: Directory ID Not given");
}
$Dir_ID=$Dir;
$NeedUser=Check_Validation($Dir_ID);
if ( $NeedUser &amp;&amp; !isset($Update) ) {
        Validate();
        print("LoggedIn: $LoggedIn<BR>");
        print("SessID  : $PHPSESSID<BR>");
        print("<A href=\"logout.php\">End Session</A>");
}
mysql_close();
?>

So far, so good. Username wordt gevalideerd en $LoggedIn wordt gezet.

op het moment dat ik echter de sessie wil beindigen door in logout.php het volgende te doen:
PHP:
1
2
3
4
5
6
7
<?
        session_start();
        print("Pre-Loggedin: $LoggedIn<BR>");
        session_unset();
        session_destroy();
        print("You've been successfully logged out, please wait");
?>

dan wordt de sessie dus niet beeindigd :(
Wat mis ik :? :? :?

  • Bas_f
  • Registratie: Januari 2001
  • Laatst online: 25-08 14:27
Daar heb ik ook wel eens problemen mee gehad.
Ik zou gewoon session_unregister("variablenaam"); gebruiken voor iedere session var die je gebruikt. (En daarna een session_destroy() )

...


Verwijderd

wat is de error die je krijgt?

Verwijderd

bij mij werkt destroy ook niet echt..
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
session_start();
if (!session_destroy()) {
      echo "<link rel=\"stylesheet\" style=\"text/css\" href=\"style.css\"> ";
      echo "Ben je wel ingelogd?";
}
else {
      echo "<link rel=\"stylesheet\" style=\"text/css\" href=\"style.css\"> ";
       echo "Succesvol uitgelogd";
}
?> 
?>

of ik nou wel of niet ingelogt bent, hij zegt altijd: "Succesvol uitgelogd";

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
Op vrijdag 28 december 2001 10:43 schreef Xtentic het volgende:
wat is de error die je krijgt?
Kreeg ik maar een error.
Op het moment dat ik die session_destroy() doe zou, als ik alles goed begrepen heb, de huidige sessie beeindigd moeten worden.
Als ik echter (via bijv een META REFRESH) terug ga naar de $HTTP_REFERER pagina heb ik nog steeds een actieve sessie :?

[edit] zie [url="http://http:/therookie.dyndns.org/tmp/session.php"]hier[/url] voor de pagina's in actie (user:test / pw:test)
gedachte: moet de validatie van de user ook niet ongedaan gemaakt worden ?
Los daarvan zou, als ie weer geauthentificeerd wordt er toch een ander sessieid gegeneerd moeten worden omdat de vorige sessie beeindigd is ?

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
[Update]
't ligt dus niet aan de authentificatie.
Als ik het zonder authentificatie doe wil ie nog steeds de sessie niet beëindigen :(:(

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

is het niet een caching probleem? dat was het de laatste keer dat ik zoiets had....
Probeer je script eens op te vragen met een ?onzin=[willekeurig nummer] er achter...

Localhost, sweet localhost


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
Op vrijdag 28 december 2001 17:56 schreef kvdveer het volgende:
is het niet een caching probleem? dat was het de laatste keer dat ik zoiets had....
Probeer je script eens op te vragen met een ?onzin=[willekeurig nummer] er achter...
Helaas, maakt nix uit.
zie hier voor de versie zonder authentificatie (zet er een s achter voor de source)

  • Bas_f
  • Registratie: Januari 2001
  • Laatst online: 25-08 14:27
Op vrijdag 28 december 2001 11:52 schreef TheRookie het volgende:
Op het moment dat ik die session_destroy() doe zou, als ik alles goed begrepen heb, de huidige sessie beeindigd moeten worden.
Als ik echter (via bijv een META REFRESH) terug ga naar de $HTTP_REFERER pagina heb ik nog steeds een actieve sessie :?
session_destroy() destroys all of the data associated with the current session. It does not unset any of the global variables associated with the session, or unset the session cookie.

This function returns TRUE on success and FALSE on failure to destroy the session data.
Korom, je moet ook je variable ff leegmaken en terminaten met een session_unregister();

...


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
Op zaterdag 29 december 2001 15:17 schreef Bas_f het volgende:

Korom, je moet ook je variable ff leegmaken en terminaten met een session_unregister();
Dat weet ik, vandaar dat ik ook eerst een session_unset doe vóór de session_destroy :P

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
^^ Kick ^^

Niemand een idtje ? :'(

  • MrFrans
  • Registratie: December 2000
  • Laatst online: 15-01 06:27

MrFrans

Always watching

Ik heb het volgens mij ook weleens gehad? Al een tijdje niet meer gephp't. :)
Ik loste het geloof ik op door hem na de session destroy een pagina zonder session_start() te open. Dus een gewone html pagina waar ie zegt u bent nu uitgelogd of iets dergelijks. Probeer het eens, misschien werkt het.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
Been there, done that, didn't work ;(

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
^^ Kick ^^

Laatste Poging :'(

Verwijderd

wat heb je geinstalleerd PHPDev?... zo jah maak dan ook ff een C:\tmp aan of zoek die ff in je PHP ini die in je Windows of PHP dir staat :)

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Topicstarter
denk dat ik heeeel lang kan zoeken naar m'n Windows dir op m'n OpenBSD machine :P

De sessie files worden aangemaakt in /tmp:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bash-2.04$ ls -la sess*
-rw-------  1 nobody  wheel  13 Jan 16 10:45 sess_0749fed0d7d4c2f11f380378e5b64a19
-rw-------  1 nobody  wheel  13 Jan 17 22:44 sess_0912f78f833823f8b0ac818397ff7b87
-rw-------  1 nobody  wheel  13 Jan 19 08:52 sess_285e75358140ce4e2f99b7817572d536
-rw-------  1 nobody  wheel  13 Jan 18 22:11 sess_2ea6d87b3fea50685c9901aa4ba2d5c4
-rw-------  1 nobody  wheel  13 Jan 17 15:04 sess_365b120f23e6b9974bdb72c3f1eef759
-rw-------  1 nobody  wheel  13 Jan 16 08:46 sess_386a1663ee2825dbbf23f3dc6f5ae828
-rw-------  1 nobody  wheel  13 Jan 17 01:47 sess_55a40f696e55222e9150f38d38596f2b
-rw-------  1 nobody  wheel  13 Jan 19 14:23 sess_67f626671680a03505fa297243be1bf0
-rw-------  1 nobody  wheel  13 Jan 17 16:32 sess_81543ff03fca2d8b2f14eca34647c097
-rw-------  1 nobody  wheel  13 Jan 18 10:56 sess_8b1412a6d7d14c3785176455fe7d1f50
-rw-------  1 nobody  wheel  13 Jan 19 08:19 sess_9f91a65c0c6762ed70808196c936c98a
-rw-------  1 nobody  wheel  13 Jan 18 13:46 sess_a30597a8fdf512b3fb8a75fc4ff491a7
-rw-------  1 nobody  wheel  13 Jan 18 16:33 sess_ac9fbdd7bf51681f83f29dfac403402d
-rw-------  1 nobody  wheel  13 Jan 16 12:18 sess_e701749a4140175a2b81195a492cb69b
-rw-------  1 nobody  wheel  13 Jan 17 19:30 sess_f7e70e768c8769c6cca6a8651a46b776
-rw-------  1 nobody  wheel  13 Jan 17 21:33 sess_ff17c95a725327d5ae0aca62b58f4372
bash-2.04$

zie nu alleen dat oude sessie files niet 'opgeruimd' worden :?

Verwijderd

Ik zit nu ook met een 'probleem' wanneer ik gewoon probeer uit te loggen... met deze code
PHP:
1
&lt;?    $_SESSION['userid'] = &quot;&quot;;    $_SESSION['user'] = &quot;&quot;;    $_SESSION['sessionid'] = &quot;&quot;;    $_SESSION['usserrights'] = &quot;&quot;;    $_SESSION['userforumrights'] = &quot;&quot;;    unset($_SESSION['userid']);    unSet($_SESSION['user']);    unSet($_SESSION['sessionid']);    unSet($_SESSION['usserrights']);    unSet($_SESSION['userforumrights']);?&gt;

blijven de sessions leven :{ hoe is dit mogelijk?...

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Gebruik je meerdere frames ofzo? Dat geeft namelijk nog wel is problemen, dat er voor elk appart frame een sessie wordt aangemaakt. Je moet je sessie altijd alleen starten op top.

Ik gebruik dit en dat werkt perfect...dus zal wel aan je instellingen liggen dan.
PHP:
1
&lt;?    function Login(&amp;amp;$CUsers, &amp;amp;$Session) {        $this-&gt;challenge = &amp;amp;$Session['login_challenge'];        $this-&gt;logedonuser = &amp;amp;$Session['login_logedonuser'];        if (!isSet($Session['login'])) {            $Session['login'] = true;            $this-&gt;challenge = 0;            $this-&gt;logedonuser = '';            $this-&gt;seed();        }        $this-&gt;CUsers = &amp;amp;$CUsers;        $this-&gt;allows = array();    }    function doLogin($username, $passw) {        if (!$info = $this-&gt;findUser($username)) return false;        if ($this-&gt;challenge != 0 &amp;amp;&amp;amp; md5($info[1] . $this-&gt;challenge) == $passw) {            $this-&gt;challenge = 0;            $this-&gt;loggedonuser = $info[0];            return true;        } else return false;    }    function logout() {        $this-&gt;loggedonuser = '';        $this-&gt;challenge = 0;    }    function isLoggedOn() {        return ($this-&gt;logedonuser != '');    }?&gt;

Verwijderd

Nee alles zit in 1 html, maar het rare is dat ie gewoon de sessie niet weghaalt en dat kan irritant zijn met het gebruiken van het forum (die werkt dan niet meer) want er zijn 0 rechten :?

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

* PaPa Eend heeft hier ook probs mee gehad :{

Dit werkt wel :Y)
PHP:
1
&lt;?switch ($action){case 'killsession':    {        if(isset($_COOKIE[session_name()]))            {                $_SESSION = array();                session_destroy(); // To delete the old session file                unset($_COOKIE[session_name()]);            }    die('session deleted');    break;    }case 'showsession':    {        echo '&lt;pre&gt;$_SESSION data: &lt;br&gt;';        print_r($_SESSION);        echo '&lt;br&gt;$_POST data:&lt;br&gt;';        print_r($_POST);        echo '&lt;br&gt;$_COOKIE data:&lt;br&gt;';        print_r($_COOKIE);        echo '&lt;/pre&gt;';        die();        break;    }}?&gt;

Stop uploading passwords to Github!


Verwijderd

Op zondag 21 juli 2002 11:15 schreef xtentic het volgende:
..
offtopic: start dan een nieuwe topic en laat deze met rust.. je draagt zo niets bij tot de eigenlijke vraag

|:(
Pagina: 1