Toon posts:

[PHP] session problemen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Halo,

Uit een tutorial van phpfreakz (shop systeem met koekjes) probeer ik nu een shop op te bouwen. Omdat ik alles veel veiliger probeer te maken heb ik voor cart.php een SSL verbinding. Ook wil ik de data niet in koekjes maar in sessies gooien (op jullie aanraden), maar daar lijkt het fout te gaan, want als ik $cart opvraag krijg ik helemaal niks op mijn scherm. Ik kan alleen de fout niet vinden :(. Hieronder is het script:
PHP:
1
<?error_reporting(E_ALL);session_start();$site  = "http://www.bla.com/arjan/";$site2 = "http://www.bla.com/arjan";$site3 = "https://www.bla.com/arjan/";$site4 = "https://www.bla.com/arjan";// Is de sessie er niet?? maak die dan aanif( !session_is_registered("cart") ){    $cart = "";    session_register("cart");}// Data veilig makenif ($HTTP_SESSION_VARS["cart"]) {  $HTTP_SESSION_VARS["cart"] = addslashes($HTTP_SESSION_VARS["cart"]);}$REQUEST_URI = addslashes($REQUEST_URI);// .html deleten$REQUEST_URI = ereg_replace (".html", "", $REQUEST_URI); // ulr omschoppen in vars$url_array=explode("/",$REQUEST_URI);  $url0=$url_array[1];$url1=$url_array[2];$url2=$url_array[3];$url3=$url_array[4];$url4=$url_array[5];// Functie om $HTTP_SESSION_VARS["cart"] aan te passenfunction AddProduct($id, $aantal){  // heben we een artikelnummer gekregen ($url4)??  if ($id != ""){    // Zit daar een aantal bij?? Anders is het er maar 1    if ($aantal == ""){      $aantal = 1;    }    // Is de sessie er al, dan passen wij hem aan    if ($HTTP_SESSION_VARS["cart"]) {       if (ereg("$id\(([0-9]+)\)", $HTTP_SESSION_VARS["cart"], $regs)) {         $aantal = $aantal + $regs[1];         $HTTP_SESSION_VARS["cart"] = ereg_replace(         "^(.*)($id)\([0-9]+\)(.*)$",         "\\1\\2($aantal)\\3",         $HTTP_SESSION_VARS["cart"]);       }       else {         // Is hij er, maken we hem langer        $HTTP_SESSION_VARS["cart"] .= "-$id($aantal)";       }     }     else {       // Is hij er nog niet, maken we een nieuwe      $HTTP_SESSION_VARS["cart"] = "$id($aantal)";     }   } }// en de weergave nog even regelenswitch ($url3) {  case add:    AddProduct($url4, $aantal);//    echo "<html><head><title></title></head><body onLoad=\"document.location.href='$site4/shopEXP/cart/view';\"></body></html>";    echo $HTTP_SESSION_VARS["cart"];    break;  case view:    echo "<html><head><link rel=\"stylesheet\" href=\"$site4/c/urs3.css\" type=\"text/css\"><title></title></head><body>";    echo $HTTP_SESSION_VARS["cart"];    echo "</body></html>";    break;}?>

Verwijderd

[topic=512413] gelezen?

Verwijderd

Topicstarter
Dat is het probleem niet, want als ik $url4 echo, krijg ik keurig het artikelnummer. De fout zou hier moeten zitten in het setten v/d sessie, maar waarom weet ik niet.....

Verwijderd

je kan het iig proberen door $_SESSION["cart"] te echoën ipv $cart, dat wordt toch de "nieuwe" standaard...

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
als jij de pagina begint met
PHP:
1
<?session_start()?>

..wat je doet...

Registerd met
PHP:
1
<?session_register("naamVanVar");?>

mag een variabele zijn, object en arrayen deze weer opvraagt met
PHP:
1
<?$eenVar= $HTTP_SESSION_VARS[naamVanVar];?>

Dan zou het moeten werken. Ik kan het zo ff snel niet in je code terug vinden dus vandaar ff zo :)

Verwijderd

Topicstarter
Beide manieren gebruikt, maar geen resultaat :( Komt dat misschien door dat SSL ?? Of omdat ik frames gebruik?

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
Op donderdag 04 juli 2002 20:06 schreef eldeejee het volgende:
Beide manieren gebruikt, maar geen resultaat :( Komt dat misschien door dat SSL ?? Of omdat ik frames gebruik?
Zou niet mogen uitmaken. Je gaat een sessie aan met(vanuit) de browser, dus frames of niet ... mag niet uitmaken(voor zover ik weet)

SSL is gewoon puur voor de verbinding en zou ook niets mogen uitmaken.

Lijkt me dathet toch puur aan de aanroep van je variabelen ligt

Verwijderd

Topicstarter
Dat dacht ik dus ook, inmiddels is mn source weer wat aangepast, dus die update ik boven even....

En het probleem blijft :(

Voor mensen die het zelf eens willen proberen: $url4 bevat het artikelnummer, als je dus bijv het script aan zou roepen moet je even dat URI gedeelte weghalen en dan aanroepen met ?url4=1006 ofzo ;)

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
weet je ook zeker dat er wel iets in $cart staat ?(neem aan van wel :+ )

Verwijderd

Topicstarter
Op donderdag 04 juli 2002 20:17 schreef TheRebell het volgende:
weet je ook zeker dat er wel iets in $cart staat ?(neem aan van wel :+ )
Als ik het onderste gedeelte voor dit vervang:
PHP:
1
<?switch ($url3) {  case add:    AddProduct($url4, $aantal, $cart);    echo "<html><head><title></title></head><body onLoad=\"document.location.href='$site4/shopEXP/cart/view/$url4';\"></body></html>";    break;  case view:    echo "<html><head><link rel=\"stylesheet\" href=\"$site4/c/urs3.css\" type=\"text/css\"><title></title></head><body>";    echo $cart, $url4;    echo "</body></html>";    break;}?>

Dan krijg ik keurig na het doorsturen van de user naar de view pagina (waar hij dus het koekje weer meot geven) de waarde van $url4 waarmee hij opgeroepen is, maar niks uit het koekje.....

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
het was toch ook niet de bedoeling dat er iets uit een koekje kwam :? dat zei je iig aan het begin.

Run dit eens in een filetje (sestest.php)
PHP:
1
<?session_start();$var= $HTTP_SESSION_VARS[tekst];$tekst= "blaaaaat";session_register("tekst");echo "<a href=\"sestest.php\">reload</a>";echo $var;?>

Als je reload moet je "blaaaat" zien staan. Werkt hier bij mij iig.

Verwijderd

Topicstarter
Op donderdag 04 juli 2002 20:27 schreef TheRebell het volgende:
het was toch ook niet de bedoeling dat er iets uit een koekje kwam :? dat zei je iig aan het begin.

Run dit eens in een filetje (sestest.php)
Als je reload moet je "blaaaat" zien staan. Werkt hier bij mij iig.
Werkt, maar nu weet ik nog niet wat het probleem is

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
Op donderdag 04 juli 2002 20:52 schreef eldeejee het volgende:

[..]

Werkt, maar nu weet ik nog niet wat het probleem is
je aanroep en instellingen zijn dus iig goed :)

Verwijderd

Topicstarter
Ik zit bij widexS, tis dus geen eigen installatie

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
Op donderdag 04 juli 2002 21:42 schreef eldeejee het volgende:
Ik zit bij widexS, tis dus geen eigen installatie
misschien dat het daar aan ligt. Ik heb zo ff geen idee waar het aan ligt :(

Verwijderd

Topicstarter
De fout zou dan dus gewoon in mijn script moeten zitten, maar waar :(

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
Op donderdag 04 juli 2002 21:56 schreef eldeejee het volgende:
De fout zou dan dus gewoon in mijn script moeten zitten, maar waar :(
tsja, dat vraag ik me dus ook af.... misschien dat een mede GoT'er het ziet :? ikke iig zo ff niet (wordt ook alweer wat later daar zal het ook aan liggen...

..weet zo alleen niet wat... :'(

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
php.net:
With $_SESSION or $HTTP_SESSION_VARS, there is no need to use session_register()/session_unregister()/session_is_registered() functions.

verder raad ik je aan om
code:
1
error_reporting(E_ALL);

boven je script te zetten om fouten eruit te halen.

Pas de replâtrage, la structure est pourrie.


  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
Op vrijdag 05 juli 2002 00:25 schreef Apollo_Futurae het volgende:
php.net:
With $_SESSION or $HTTP_SESSION_VARS, there is no need to use session_register()/session_unregister()/session_is_registered() functions.

verder raad ik je aan om
code:
1
error_reporting(E_ALL);

boven je script te zetten om fouten eruit te halen.
:? en hoe wil jijdan in je script zeggen dat ie een var in de sessie moet reggen?!?!?!?!
Kortom, volgens dit stukje regged ie alles in een sessie :?

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
nee, dat staat er niet. Er staat dat wanneer je gebruik maakt van de super globals $HTTP_SESSION_VARS[] of $_SESSION[], je die niet hoeft te registreren als session variabelen.

Het script dat bovenaanstaat gaat hiert erg onlogisch mee om, er wordt gewerkt alsof $_SESSION een constante is waar je maar 1 keer vanaf mag lezen. Dat is echter zeker niet het geval, juist door direct de $_SESSION array aan te passen, verandere je direct de variabelen in je session, zonder dat je moeilijk hoeft te doen over het registreren van een variabele in je session. Het scheelt je dus een hop werk, waar fouten in kunnen sluipen. Verder zal je code ook een stuk overzichtelijker worden, omdat je in de code zelf meteen kan zien dat er gebriuk wordt gemaakt van een session variabele. Dat scheelt je dus een hoop zoeken naar waar de variabele gedeclareerd is.

Verder zou ik het probleem eens wat beter onderzoeken: is de server eigenlijk wel goed geconfigureerd voor sessions. Hoewel onwaarschijnlijk, maar een server met show_errors op 0, geeft dus ook geen foutmelding dat ie de session file niet kan schrijven.

Ook het gebruik van logische namen voor variabelen is misschien wat aantrekkelijker voor de mede GoTter, omdat die het alleen van de namen moet hebben, terwijl de schrijver al weet wat er mee bedoelt wordt.

Een constructie als:
PHP:
1
<?$url_array=explode("/",$REQUEST_URI);  $url0=$url_array[1];$url1=$url_array[2];$url2=$url_array[3];$url3=$url_array[4];$url4=$url_array[5];?>

is natuurlijk ook iets waardoor de gemiddelde GoTter die eventueel help zou kunnen bieden steil achterover slaat van het lachen en al helemaal geen zin heeft om te helpen, omdat ie weet dat zoiets erg lang kan gaan duren.

Ik wil de topicstarter natuurlijk niet persoonlijk aanvallen, maar zoals ik dit topic zie, krijg ik het gevoel van: ga eerst zelf een een beetje debuggen en op php.net kijken of de voorbeelden die daar staan niet kunnen bijdragen aan de oplossing.

Verwijderd

Yo freak007 ik vind het toch jammer dat zulke reacties keer op keer gegeven worden op got.
Ik had toch wel een wat volwassenere houding verwacht!
Okee de code is niet optimaal, maar eldeejee doet zijn best en heeft de door hem geposte code netjes uitgelijnd te toegelicht.

Okee het is dan misschien geen briljante code, is de mijne ook niet, maar hij doet wel zijn best! Als eldeejee een pro was dan stond zijn post hier nu niet en was GOT zo dood als een pier, want GOT is er toch om elkaar te helpen.

Als je eldeejee niet wil helpen omdat de code wat jou betreft te "brak" is, zeg dan niets of kom met opbouwende critiek.

Uitspraken als deze:
is natuurlijk ook iets waardoor de gemiddelde GoTter die eventueel help zou kunnen bieden steil achterover slaat van het lachen en al helemaal geen zin heeft om te helpen, omdat ie weet dat zoiets erg lang kan gaan duren.
slaan natuurlijk als een lul op een trommel en doen echt afbreuk aan GOT! Misschien weet jij dat wel, maar iemand anders is druk bezig om te leren en te verbeteren!

Soz voor deze compleet offtopic reply, maar dit soort replies stellen me steeds weer teleur!

En ik heb het nu niet alleen over freak007. Er zijn nog veel meer tweakertjes die op een veel hoger niveau zitten als de gemiddelde tweaker en daar maar al te "stoer" over doen ipv iemand met een paar links, woorden, stukjes code weer een klein stapje verder naar een oplossing helpen.

:(

Verwijderd

Lees dit topic een door, gaat over mijn struggle met sessions :)
(begint ongeveer halverwege pagina 1)

verder zie ik bij jou dit niet
code:
1
2
3
4
if( !session_is_registered( "menu_item" ) ){
    $menu_item = "";
    session_register( "menu_item" );
}

Worden je sessie variabelen nu niet iedere keer overschreven?
(of is dat juist de bedoeling omdat je de produkt array steeds aanvult?)

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 03-09 01:07
Op vrijdag 05 juli 2002 11:25 schreef IceFlame het volgende:
Yo freak007 ik
...heeeeeel verhaal.....
helpen.
:(
ben het er stiekem ook wel mee eens (sorry freak007)...
Ik kan ook niet zeggen dat ik een pro ben ofzo maar ik probeer ook maar te helpen. Ik pruts ook vaak en dan ben ik ook blij als iemand anders het toevallig ziet/weet waar ik al dagen op zit te staren.
Ik kom er wel uit... ooit... maar een klein zetje in de goede richting is nooit weg. En dan zeker niet goed advies van degenen die het WEL weten(de pro's) en je dan gelijk zeggen hoe je het wel/beter/makkelijker kunt doen. Daar heb ik altijd veel aan. Dan kunnen anderen er ok gelijk nog wat van leren en kom je (hopelijk) tot een mooiere code of programma :)

Verwijderd

Topicstarter
Ik heb nu op advies van 007 $HTTP_SESSION_VARS["cart"] gaan gebruiken. Nu krijg ik deze melding:

Notice: Undefined variable: HTTP_SESSION_VARS in /opt/guide/www.bla.nl/HTML2/arjan/shopEXP/cart.php on line 39

dit is de regel:

if ($HTTP_SESSION_VARS["cart"]) {

Verwijderd

Topicstarter
Op vrijdag 05 juli 2002 11:33 schreef IceFlame het volgende:
Worden je sessie variabelen nu niet iedere keer overschreven?
(of is dat juist de bedoeling omdat je de produkt array steeds aanvult?)
Dit script moet de sessie steeds weer aanvullen met nieuwe artikelen, of het aantal van een artikel veranderen. Hij moet dus steeds herschreven worden.

Ik heb de source opnieuw aangepast boven, maar nog steeds werkt het niet

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op vrijdag 05 juli 2002 12:53 schreef eldeejee het volgende:
Ik heb nu op advies van 007 $HTTP_SESSION_VARS["cart"] gaan gebruiken. Nu krijg ik deze melding:
als je php > 4.1 gebruikt, besaat die niet meer en heet ie $_SESSION

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
GoT is geen helpdesk btw.
Je moet zelf een beetje moeite doen, en willen debuggen.
Je kan ook eens de changelogs lezen als je van versie veranderd.

https://fgheysels.github.io/


Verwijderd

hoe ik een simpele sessie gebruik om bij te houden welk menu item er geselecteerd is zonder hem overal via het url mee hoeven te posten doe ik als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if( !session_is_registered( "menu_item" ) ){
    $menu_item = "";
    session_register( "menu_item" );
}

if( isset( $CMS ) ){
    $menu_item = "CMS";
    session_register( "menu_item" );
}

if( $menu_item == "CMS" ){
    //toon CMS items
    echo "
    <tr>
        <td width=148 class=title align=center>Categorie</td>
        <td width=148 class=title align=center>Produkten</td>
        <td width=148 class=title align=center>Branche</td>
        <td width=148 class=title align=center>Projecten</td>
        <td width=148 class=title align=center>Facturen</td>
        <td width=*></td>
    </tr>
}

en uiteraard een session start aan het begin.

Is het niet wijsheid om eens je hele code te slopen tot de basis en dan 1 voor 1 elementjes toe gaan voegen.
Met zo'n lap code kan het overal mis gaan.

volgens mij is het slim om eerst wat te testen en als het werkt weer een klein stapje verder te gaan, alles in een keer gaat niet werken ben ik bang

Verwijderd

Topicstarter
Ik heb de zaak nu uit de functie gesloopt, en het werkt :-D. Nu is het alleen de vraag waarom nu wel ???

Verwijderd

als je nu eens ipv
code:
1
2
3
 $HTTP_SESSION_VARS["cart"] = ereg_replace(
"^(.*)($id)\([0-9]+\)(.*)$","\\1\\2($aantal)\\3",
$HTTP_SESSION_VARS["cart"]);

iets met session_register( "cart" ) probeert?

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op vrijdag 05 juli 2002 13:53 schreef eldeejee het volgende:
Ik heb de zaak nu uit de functie gesloopt, en het werkt :-D. Nu is het alleen de vraag waarom nu wel ???
Als je $HTTP_* gebruikt moet je er op bedacht zijn dat die tot de globale scope behoren. $_SESSION is een zogenaamde super global, die dus in alle scopes beschikbaar is.

zie ook: http://www.php.net/manual/en/language.variables.scope.php

Verwijderd

Topicstarter
Ik vat hem, thnx :-D
Pagina: 1