[PHP] session_register probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een beetje een raar probleem met sessions in php, en ik heb heel de tijd het idee dat ik iets vergeet:

In een pagina start ik een sessie op en register ik 2 dingen in de sessie. Er staan al 2 andere dingen in de sessie.

tabel.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
start_session_code; //sessie worden al gebruikt voor allerlei dingen en doen het goed
CLASS Blaat 
{
    FUNCTION overige()
    {
    }

    FUNCTION sessionprobleem()
    {
        $ses_TableName  = $this->tableName;
        $ses_TableID    = $this->veldenArray[0];
        session_register("ses_TableName");
        session_register("ses_TableID");
    }
}

Klasse blaat word aangevraagd, allemaal ok (hij genereert een tabel)

Op de volgende pagina start ik weer de sessie en lees ik ze allemaal uit (mbv print_r)

ontvangsessievars.php
PHP:
1
2
3
4
start_session_code;
echo "<PRE>";
print_r ($_SESSION);
echo "</PRE>";


en daar komt uit:
ontvangsessievars.html
code:
1
2
3
4
5
6
7
Array
(
    [ses_User_ID] => 3
    [ses_User_Functie] => admin
    [ses_TableName] => 
    [ses_TableID] => 
)


Die eerste twee waren op een andere pagina al gevuld, maar die andere twee.. waar zijn ze...
Kan iemand mij helpen? want ik zit me hier dood te staren. Het enige dat ik em kan bedenken is dat het niet vanuit een Klasse kan (kan het me niet voorstellen :()

EDIT: Blijkbaar kan het inderdaad niet zo vanuit een Klasse :(, ehm weet iemand hoe je session_register werkende kunt krijgen vanuit een klasse??

EDIT2: Maar waarom geeft ie dan wel de variabele naam mee?

[ Voor 16% gewijzigd door Verwijderd op 11-07-2003 22:07 . Reden: nog een vraagje :D ]


Acties:
  • 0 Henk 'm!

  • Expander
  • Registratie: Februari 2001
  • Niet online
PHP:
1
2
session_register("ses_TableName");
session_register("ses_TableID");

Dat moet vast respectievelijk $ses_Tablename en $ses_TableID zijn zonder de dubbele aanhalingstekens. Nu geef je de letterlijke strings door.

[ Voor 16% gewijzigd door Expander op 11-07-2003 22:08 ]

Expanding the inexpandable


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok tnx maar een paar kleine dingen.

1. Daar lag het niet aan, als je het namelijk zo doet als ik het deed, krijg je ass. array dus array["ses_TableName"] => "blaat";

2. Als ik het op jouw manier doe, is er al een heel klein stukje opgelost maar nog niet helemaal
ik krijg namelijk in
ontvangsessievars.html
code:
1
2
3
4
5
6
7
Array
(
    [ses_User_ID] => 3
    [ses_User_Functie] => admin
    [user] => 
    [user_ID] => 
)


[user] =>
[user_ID] =>
Dit zijn de twee variabelen die ik mee wilde krijgen, alleen zijn het nu twee lege variabelen, met hun string als variabele naam.

uiteindelijk moet er dus komen te staan (net als over het geval is)

code:
1
2
3
4
5
6
7
Array
(
    [ses_User_ID] => 3
    [ses_User_Functie] => admin
    [ses_TableName] => user
    [ses_TableID] => user_ID
)

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Expander schreef op 11 July 2003 @ 22:08:
PHP:
1
2
session_register("ses_TableName");
session_register("ses_TableID");

Dat moet vast respectievelijk $ses_Tablename en $ses_TableID zijn zonder de dubbele aanhalingstekens. Nu geef je de letterlijke strings door.
Nee hoor: http://nl3.php.net/manual/en/function.session-register.php

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt maar dat zei ik al :P

Acties:
  • 0 Henk 'm!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Van de al door Johnny genoemde website
This registers a global variable. If you want to register a session variable from within a function, you need to make sure to make it global using the global keyword or the $GLOBALS[] array, or use the special session arrays as noted below.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

WTF?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ah ik bene r uit:

$_SESSION['ses_TableID'] = "user";

weeh hij doet het, dank u alleen voor verschillende intressante oplossingen, en ideeen (gaat met veel parsetijd schelen :D

Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

Staat op dezelfde pagina die Johnny al gaf:
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[EDIT]: K dis wazig ik had net de fout dat als ik niet 1x session_register("ietsmaaktnietuitwat") deed, kon ik niet $_SESSION["var"] = "hallo" etc, doen.
(De $_SESSION array bleef leeg...)

Nu ben ik er achter gekomen dat het aan mijn kill_session functie lag
Kill functie
PHP:
1
2
3
4
5
6
7
8
function killSession ($level){
    switch ($level) {
        case 1  : session_unset();                      break;
        case 2  : session_destroy();                    break;
        case 3  : session_unset(); session_destroy();   break;
        default :
    }
}

een functie om een sessie totaal leeg te maken en te verwijderen, als deze namelijk niet word aan geroepen werkt het geheel wel met alleen $_SESSION...

Alleen deze functie was nogal belangrijk voor het inloggen, ehm hoe kun je er voor zorgend dat $_SESSION wordt unset en destroyed??

[ Voor 105% gewijzigd door Verwijderd op 12-07-2003 02:04 . Reden: Fout was veranderd ]


Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

Verwijderd schreef op 12 July 2003 @ 01:48:
[...]Alleen deze functie was nogal belangrijk voor het inloggen, ehm hoe kun je er voor zorgend dat $_SESSION wordt unset en destroyed??
PHP:
1
2
$_SESSION = array(); // unset alle inhoud
session_destroy(); // en weg ermee

voor een enkele sessie-var:
PHP:
1
unset($_SESSION['foo']); // unset foo

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

http://nl3.php.net/manual/en/function.session-destroy.php

Handig hoor die handleiding :/

Staat er toch echt allemaal letterlijk wat je vraagt.
[EDIT]: K dis wazig ik had net de fout dat als ik niet 1x session_register("ietsmaaktnietuitwat") deed, kon ik niet $_SESSION["var"] = "hallo" etc, doen.
(De $_SESSION array bleef leeg...)
Zie eerder dit topic.. session_register en $_SESSION moet je niet samen gebruiken. Dat levert inderdaad vreemde dingen op. Ook DIT staat letterlijk in de handleiding:

http://nl3.php.net/manual/en/function.session-register.php

[ Voor 60% gewijzigd door Bosmonster op 12-07-2003 12:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat wist ik, maar ik had nergens iets gelezen over dat je destroy niet zomaar mocht gebruiken...

En mijn punt ging er nou juist over dat als ik niet session_register gebruikte, dat ie dan de variabelen die ik met $_SESSION wilde setten, niet gebruikte (dit kwam dus omdat ik destroy() op het verkeerde moment gebruikte...

Maar goed het is opgelost, tnx @Crisp

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

In principe heb je het hele session_ verhaal helemaal niet meer nodig en zou ik het ook niet aanraden. Dan gaat het niet alleen op session_register, maar ook om de destroy/unset functies.

Waarom? Omdat ze je geen keus bieden, terwijl je dit zelf zo makkelijk kan doen dat je WEL een keus hebt.

Als jij een shoppingcart wilt onthouden, sla deze dan simpelweg op in bijvoorbeeld $_SESSION['cartdata'] oid. Zo kun je altijd je cartdata resetten middens een simpele unset($_SESSION['cartdata']). Andere sessiondata gaat dan tenminste niet direct verloren (inloggegevens e.d. bijvoorbeeld die je in $_SESSION['logindata'] bewaart).

Zo hou je zelf tenminste 100% controle.

Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Sterker nog, als je gebruik maakt van eigen sessie functies, heb je helemaal nergens last van. bv mijn eigen session_set:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function session_set($array)
{
  while (list($key, $value) = each($array))
  {
    if (isset($_SESSION["temp"]))
    {
      $session_temp = $_SESSION["temp"];
      $session_temp = unserialize($session_temp);
      unset($_SESSION["temp"]);
    }
    $session_temp[$key] = $value;
    $_SESSION["temp"] = serialize($session_temp);
  }
}

Toen in PHP de functies van sessies veranderden van session_register enz naar het gebruik met $_SESSION, hoefde ik alleen maar m'n functies aan te passen en het werkt overal...

Nu ik m'n functie weer eens bekijk zit ik me af te vragen of die (un)serialize wel nodig is... Waar een post op GoT al niet goed voor is (-:

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

while (list($key, $value) = each($array))

lol :D

Nog nooit van foreach() gehoord? ;)

Verder is die functie nogal nutteloos.. je hebt een hele functie geschreven om een variabele op te slaan :? Of waziger nog.. een hele array...

Ik kan het gebruik even niet voor me halen..

Wat is er mis met

$_SESSION['mijndata'] = $mijn_array_met_data;

Daar hebbie toch geen hele functie voor nodig :P Daarom hebben ze die dingen afgeschaft :P

[ Voor 67% gewijzigd door Bosmonster op 12-07-2003 23:58 ]


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Bosmonster schreef op 12 July 2003 @ 23:54:
while (list($key, $value) = each($array))

lol :D

Nog nooit van foreach() gehoord? ;)
LOL, idd, vaag... Zolang heb ik al niet naar mijn functies gekeken, moet ik maar weer eens gaan updaten... (-: Heb nogal wat functies in mijn begin periode geschreven dat ik net met php bezig was, kom wel eens vaker wat vage dingen tegen (-:
Verder is die functie nogal nutteloos.. je hebt een hele functie geschreven om een variabele op te slaan :? Of waziger nog.. een hele array...

Ik kan het gebruik even niet voor me halen..

Wat is er mis met

$_SESSION['mijndata'] = $mijn_array_met_data;

Daar hebbie toch geen hele functie voor nodig :P Daarom hebben ze die dingen afgeschaft :P
Is zeker wel een reden voor. Ik gebruik deze functie voor vars die ik tijdelijk wil opslaan in een sessie. Hierbij wil ik in 1 keer kunnen zien welke vars tijdelijk zijn, anderen zijn namelijk permanent. Dit gebruik ik bijvoorbeeld voor vars afkomstig van forms, die zijn tijdelijk. Vars mbt ingelogd zijn bv zijn permanent. Hierbij kan ik dus in 1 keer die tijdelijke vars wegpleuren.

Voorderest kan ik met deze functie dus in 1 keer ook meerdere vars in een sessie laten opslaan, doordat ik mn functie zo aanspreek:
PHP:
1
2
3
  session_set(array("first_name"  => $first_name,
                    "last_name"   => $last_name
                    ));

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

PHP:
1
2
3
session_set(array("first_name"  => $first_name, 
                    "last_name"   => $last_name 
                    ));
Dat bedoel ik.. waarom niet gewoon:

PHP:
1
2
3
$_SESSION['temp'] = array("first_name"  => $first_name, 
                            "last_name"  => $last_name 
                            ));


Doet toch precies hetzelfde :?

[ Voor 4% gewijzigd door Bosmonster op 14-07-2003 14:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Bosmonster schreef op 14 juli 2003 @ 14:06:
[...]


Dat bedoel ik.. waarom niet gewoon:

PHP:
1
2
3
$_SESSION['temp'] = array("first_name"  => $first_name, 
                            "last_name"  => $last_name 
                            ));


Doet toch precies hetzelfde :?
Nee, je zal 100% zeker een parse error krijgen :)
(Mischien een haakje teveel :P)

Denk dat dit meer een persoonlijke voorkeur is, als je niet graag $_SESSION gebruikt.
Pagina: 1