Toon posts:

[php] Sessions doen heel vaag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb nooit echt problemen gehad met sessions, tot nu toe dan. Ik ben bezig met het maken van een bepaald script op mijn localhost waar ik Php versie 4.1.1 heb draaien.

Dus het gebruik $HTTP_SESSION_VARS is vereist (dus geen $_SESSION e.d.) en omdat ik liever een duidelijk onderscheid heb tussen gewone variabelen en variabelen van cookies en sessions. Gebruik ik deze en niet een combinatie van session_register ivm "gewone vars" zoals php.net zegt.

Dus doe ik zoals php.net altijd al heeft gezegt, m'n sessions zo registreren:

PHP:
1
$HTTP_SESSION_VARS['naam'] = 1;


Nu zou dit dan moeten werken, maar dat doet het gek genoeg niet... Natuurlijk heb ik session_start() boven m'n document staan. Gek genoeg is het wel dat nadat ik de session geregistreerd heb, het 'ie "even" doet, maar na een refresh of pagina verandering is de session nog wel geregistreerd (gezien dmv print_r($HTTP_SESSION_VARS) maar is ie zijn waarde kwijt. Das toch heel vaag...?

Opmerking is wel, dat ik ob_start() en ob_end_flush() gebruik om de output door te schuiven naar het einde v/h document omdat ik nu eenmaal veel headers gebruik, en ik het dus zo maar heb opgelost. Wat normaal geen probleem (zou moeten zijn) is.

Heeft iemand hier ervaring mee, of enig idee qua oplossing?

BVD.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

$_SESSION werkt prima in php-4.1.1 (vanaf 4.1.0 zelfs al)
En volgens mij werkt bovenstaande code alleen met $_SESSION en niet met $HTTP_SESSION_VARS, maar dat weet ik niet zeker.
Sterker nog, ik weet zelfs niet zeker of dit uberhaupt mogelijk is in pre-4.2 versies, staat vast wel in de manual bij session_register

Ah, dat zou vanaf 4.0.6 moeten kunnen, maar bij versies groter dan 4.1 wordt wel steeds de $_SESSION genoemd ipv de $HTTP_SESSION_VARS.
http://www.php.net/manual/en/function.session-register.php

Verwijderd

Topicstarter
Hmmm, omdat de "localhost-versie" voor een andere server is met een (helaas) oudere Php versie heb ik 't zo gedaan...

En omdat ik dan bij het overzetten weer alle $_SESSION's zou moeten gaan vervangen met $HTTP_SESSION_VARS' is er dan geen mogelijkheid om $HTTP_SESSION_VARS de waarde van $_SESSION te laten verkrijgen? (t'is maar een idee om m'n werk te verlichten ('tis niet bepaald een klein script) :))

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wellicht zoiets:
PHP:
1
2
foreach($_SESSION as $var => $val)
$HTTP_SESSION_VARS[$var] = $val;

Maar echt netjes is dat niet :)
En het zal ook niet werken met de session_register lijkt me.

Magoed test het eerst eens wat beter:
Doe es een paginatje ala:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
if(!isset($_SESSION['x']))
    $_SESSION['x'] = 0;
$HTTP_SESSION_VARS['y'] = 0;
session_start();
print_r($_SESSION);
print_r($HTTP_SESSION_VARS);
$_SESSION['x']++;
$HTTP_SESSION_VARS['y']++;
?>

En refresh dat een paar keer.

[edit]
Het door elkaar gebruiken van $_SESSION en $HTTP_SESSION_VARS vindt mijn php-4.2.3. niet zo geschikt, maar ze werken beiden.

[ Voor 0% gewijzigd door ACM op 27-10-2002 13:34 . Reden: bugfixes :) ]


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
Array
(
    [x] => 0
)
Array
(
    [y] => 14
)


$HTTP_SESSION_VARS werkt kennelijk dus alleen...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 27 oktober 2002 @ 13:34:
code:
1
2
3
4
5
6
7
8
Array
(
    [x] => 0
)
Array
(
    [y] => 14
)


$HTTP_SESSION_VARS werkt kennelijk dus alleen...

Nee, ze zijn mutual exclusive lijkt het, je kan $_SESSION alleen gebruiken als je die $HTTP_SESSION_VARS calls weglaat.

Maar je $HTTP_SESSION_VARS werkt dus gewoon, lijkt me dat je dan iets anders fout doet? :)

Verwijderd

Topicstarter
Dat wordt dus echt code omspitten, 500 regels :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Hoezo :?
Want $HTTP_SESSION_VARS['x'] = "bla";
Werkt prima in php-4.2.3 ...
En $_SESSION['x'] = "bla";
werkt ook prima vanaf php-4.1.0

Je kan ze dus beide gebruiken (alleen niet door elkaar).

Verwijderd

Topicstarter
Daar komt 'ie; de sessions werken niet naar behoren...

Zoals ik in m'n eerste post beschreef werken m'n sessions niet juist. Na een refresh oid is de session waarde plots verdwenen, maar de session blijft wel geregistreerd.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Lijkt me dan niet noodzakelijk aan het gebruik van $HTTP_SESSION_VARS te liggen :?

In mijn (korte) test ging het tenslotte wel goed.
Maar zoals ik al zei, als je nu bijv $_SESSION, $HTTP_SESSION_VARS en session_register (niet eerder gezegd, maar ik verwacht dat die er ook bij hoort) door elkaar gebruikt gaat het mis.

Als je dat niet door elkaar doet lijkt me dat je een andere fout maakt.

Btw, je kan ze natuurlijk met een simpele search-en-replace wijzigen, dus echt veel werk is het niet om het even met $_SESSION ipv $HTTP_SESSION_VARS te testen, magoed.

Verwijderd

Topicstarter
Ik zal dus iig eens even goed gaan kijken wat ik precies fout doe... dat 't dus niet aan de "sessions" in het algemeen ligt, is bewezen :)

  • JointFillah
  • Registratie: Juli 2000
  • Laatst online: 24-08 07:13

JointFillah

Techno Addict

Heb je register globals aan staan? Als je in je script ergens iets als $naam = whatever hebt staan, is het heel goed mogelijk (van nieuwere php-versies ben ik er vrij zeker van zelfs) dat de session waarde veranderd in het nieuwe 'whatever'...dus:
PHP:
1
2
3
4
5
6
7
$HTTP_SESSION_VARS['naam'] = 1;

/*
 * Scripting die de var $naam gebruikt,
 * waardoor de boel veranderd in:
 */
$HTTP_SESSION_VARS['naam'] = 'whatever';

~* Peace, Love & XTC *~


Verwijderd

Topicstarter
Thanks, daar had ik totaal niet aan gedacht, en ik dus maar denken "waar ligt het toch aan, want ik doe niets fout". En dus was het dat :)

(hij zat overigens wel helemaal verstopt, gelukkig zit er een zoekfunctie in Crimson Editor)

Bedankt!

Verwijderd

Topicstarter
Nu een volgend probleem; ik kan m'n session niet unreggen/deleten.

Volgens de manual moet dat met unset() dus ik probeer:

PHP:
1
2
3
unset($HTTP_SESSION_VARS['user'])
// en
unset($user);


Maar geen van beide werken (goed), en als ik ze beide erin zet, deleten ze alle sessions :?

Ik kan dan wel session_unset() en session_destroy() doen, maar deze deleten dan eveneens alle sessions.

Welke fout maak ik? aka Waarom werkt unset() niet gewoon?

Alvast bedankt.

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Er zijn sinds php versie 4.0.6 wat rare dingen met sessies aan de hand. Zo werken in php 4.1.2 sessies helemaal niet zoals het hoort. Volgens mij staat Hier wel wat waar je wat mee kan.

Systeem | Strava


Verwijderd

Topicstarter
Thanks, ben al weer een stukkie wijzer van geworden wat dat betreft. Ik ga er eens mee aan de slag :)

Verwijderd

Topicstarter
Nou, ik heb het uiteindelijk opgelost. Op een onlogische en misschien ook wel rare manier, maar sessions zijn op dit moment nu eenmaal een bak bagger.

session registeren
PHP:
1
$HTTP_SESSION_VARS['naam'] = 1;


session check
PHP:
1
isset($HTTP_SESSION_VARS['naam'])


session 'verwijderen'
PHP:
1
session_unregister('naam');


Dit geldt dan voor Php 4.1.1 (met register_globals(on) !!) voor zover ik weet. Dit zal dus waarschijnlijk niet kloppen in een versie zoals 4.2.* waarbij $_SESSION wordt gebruikt en het helemaal weer anders zal liggen (en misschien ook wel gewoon zal werken zoals de manual voorschrijft).
Pagina: 1