$HTTP_SESSION_VARS in function aufrufen
Hansi
- php
Hallo,
kann mir jemand sagen wie ich in einer Funktion Zugriff auf auf $HTTP_SESSION_VARS ? So wie es dort steht wird mir nichts übergeben.
function in_warenkorb_legen($art_nr)
{
echo "art_nr: ".$art_nr."<br>######<br><br>";
echo $HTTP_SESSION_VARS['username'];
}
Wie defenieren ich die Varaible außerhalb der Funktion als global so das alle $HTTP_SESSION_VARS Variablen auch in Funktionen sichtbar sind?
global $HTTP_SESSION_VARS['username'];
// vor der Funktion funktioniert auch nicht
global $HTTP_SESSION_VARS[''];
// vor der Funktion funktioniert auch nicht
Danke!
Gruß Hansi
Hallo,
kann mir jemand sagen wie ich in einer Funktion Zugriff auf auf $HTTP_SESSION_VARS ? So wie es dort steht wird mir nichts übergeben.
Lies dir http://at2.php.net/variables.scope durch und wenn das dein Problem nicht löst, erkläre mir warum du nicht $_SESSION verwendest.
gruß,
Severin
Hallo,
kann mir jemand sagen wie ich in einer Funktion Zugriff auf auf $HTTP_SESSION_VARS ? So wie es dort steht wird mir nichts übergeben.
Lies dir http://at2.php.net/variables.scope durch und wenn das dein Problem nicht löst, erkläre mir warum du nicht $_SESSION verwendest.
gruß,
Severin
Ich habe es nun so gelöst:
function in_warenkorb_legen($art_nr)
{
echo "art_nr: ".$art_nr."<br>######<br><br>";
//echo getenv('SCRIPT_NAME');
global $HTTP_SESSION_VARS;
echo $HTTP_SESSION_VARS['username'];
}
Aber zu $HTTP_SESSION_VARS wo ist dort denn der Unterschied?
Gibt es da überhaupt ein Unterschied ich kann keine erkennen oder welchen Vorteil bringt mir die Variable?
Gruß Hansi
Hallo,
Aber zu $HTTP_SESSION_VARS wo ist dort denn der Unterschied?
Gibt es da überhaupt ein Unterschied ich kann keine erkennen oder welchen Vorteil bringt mir die Variable?
Ich nehme an, du redest über $_SESSION. $HTTP_SESSION_VARS und $_SESSION sind im wesentlichen identisch, mit dem Unterschied,dass $_SESSION "superglobal" ist, was heißen soll, dass du dir das global sparen kannst:
function foo(){
echo $_SESSION['username'];
}
vgl.http://at2.php.net/release_4_1_0.php
Auch ist $HTTP_SESSION_VARS deprecated (=veraltet) und man sollte nach Möglichkeit $_SESSION verwenden. http://at2.php.net/variables.predefined
gruß,
Severin
Hallo,
Nachtrag:
Ein weiterer Vorteil von $_SESSION ist, dass man ihm Werte ohne session_register() zuführen kann:
<?php
session_start();
session_register('foo');
$foo = 'bar';
?>
entspricht
<?php
session_start();
$_SESSION['foo'] = 'bar';
?>
.
gruß,
Severin
<?php
session_start();
session_register('foo');
$foo = 'bar';
?>entspricht
<?php
session_start();
$_SESSION['foo'] = 'bar';
?>
.
gruß,
Hallo Severin
Ok soweit habe ich das schon einmal verstanden irgendwo habe ich aber gelesen das register_globals = off sicherer ist!
Nur ist die Frage in wie weit ist es für mich sicherer da ich es sonst in der Funktion eh auf global stelle!
Nun komme ich eigentlich zu meinen eigentlichen Problem ich möchte in der Session Variable Warenkorb meine einkäufe abspeichern nur wie mache ich das? Kann ich in $_SESSION['warenkorb'] auch ein Array abspeichern? Nur ist mir nicht ganz klar wie ich das machen soll?
$_SESSION['warenkorb'] = array("Art_Nr=1&anzahl=2","Art_Nr=22&anzahl=3","Art_Nr=23&anzahl=2","Art_Nr=88&anzahl=44","Art_Nr=12&anzahl=76","Art_Nr=33&anzahl=1");
Und wie lese ich nachher wieder Warenkorb aus?
Gruß Hansi
Hallo,
Ok soweit habe ich das schon einmal verstanden irgendwo habe ich aber gelesen das register_globals = off sicherer ist!
Der Witz dabei ist, dass $_SESSION (sowie $_POST,$_GET, $_SESSION etc.) eben auch bei deaktivierten register_globals funktionieren. http://at2.php.net/register_globals
Nur ist die Frage in wie weit ist es für mich sicherer da ich es sonst in der Funktion eh auf global stelle!
In den Release Notes zur Version 4.1.0 (siehe vorheriges Posting) steht genau warum man register_globals ausschalten soll.
Nun komme ich eigentlich zu meinen eigentlichen Problem ich möchte in der Session Variable Warenkorb meine einkäufe abspeichern nur wie mache ich das? Kann ich in $_SESSION['warenkorb'] auch ein Array abspeichern? Nur ist mir nicht ganz klar wie ich das machen soll?
http://at2.php.net/manual/en/language.types.array.php.
Genauer: http://at2.php.net/manual/en/language.types.array.php#AEN3901.
Zu deinem Beispiel:
$_SESSION['warenkorb'] =
array("Art_Nr=1&anzahl=2","Art_Nr=22&anzahl=3","Art_Nr=23&anzahl=2","Art_Nr=88&anzahl=44","Art_Nr=12&anzahl=76","Art_Nr=33&anzahl=1");
echo $_SESSION['warenkorb'][0]; //gibt aus:Art_Nr=1&anzahl=2
echo $_SESSION['warenkorb'][1]; //gibt aus:Art_Nr=22&anzahl=3
gruß,
Severin
http://at2.php.net/manual/en/language.types.array.php.
Genauer: http://at2.php.net/manual/en/language.types.array.php#AEN3901.Zu deinem Beispiel:
$_SESSION['warenkorb'] =
array("Art_Nr=1&anzahl=2","Art_Nr=22&anzahl=3","Art_Nr=23&anzahl=2","Art_Nr=88&anzahl=44","Art_Nr=12&anzahl=76","Art_Nr=33&anzahl=1");echo $_SESSION['warenkorb'][0]; //gibt aus:Art_Nr=1&anzahl=2
echo $_SESSION['warenkorb'][1]; //gibt aus:Art_Nr=22&anzahl=3
»»
»»
»»
»»
Hallo Severin
Du hilfst mir sehr weiter! :-)
Eine Frage habe ich zwar noch zu Session wo ich keine richtige Antwort zu gefunden habe.
Wenn ich mich als User im Shop einloge und eine Bestellung in
$_SESSION['warenkorb'] = array("Art_Nr=111&anzahl=11","Art_Nr=222&anzahl=33");
ablege was ist denn wenn zur gleiche Zeit ein andere User eine Bestellung durchführt ich möchte nicht das der meine Session Variable überschreibt.
Oder ist das bei Dem Session-Hash genauso wie bei der Session-ID das jedesmal eine neue Session-Hash-ID erzeugt wird und somit der
$_SESSION['warenkorb'] = array("Art_Nr=1&anzahl=2","Art_Nr=22&anzahl=3"); nicht vom anderen User überschrieben werden kann?
Sonst muß ich mir noch was anderes ausdenken...
Gruß Hansi
Hallo,
Du hilfst mir sehr weiter! :-)
Dafür sind das Forum und ich da ;-)
Wenn ich mich als User im Shop einloge und eine Bestellung in
$_SESSION['warenkorb'] = array("Art_Nr=111&anzahl=11","Art_Nr=222&anzahl=33");
ablege was ist denn wenn zur gleiche Zeit ein andere User eine Bestellung durchführt ich möchte nicht das der meine Session Variable überschreibt.
Das kann eigentlich nicht passieren (Ich ignoriere jetzt einmal die Tatsache, dass sich jedes System auch hacken lässt). Das Session Handling in PHP läuft mehr oder wenige so ab:
Ein User A kommt auf eine Seite, auf der session_start() aufgerufen wird. PHP überprüft nun, ob die Session ID im Cookie oder in der URL (&PHPSESSID=12345678abcde) vorhanden ist. Ist sie nicht vorhanden, erhält der User eine neue Session ID, und sollte eine Session ID vorhanden sein, wird mit der alten Session ID gearbeitet.
Du magst dich fragen, ob der User jetzt nicht im Cookie Session Variablen ändern kann. Kann er nicht, weil nur die Session ID im Cookie steht. Die eigentlichen Session Daten liegen in einer Datei auf dem Server.
Sollte jetzt User B auf die selbe Seite gehen, liefert er keine korrekte Session ID und es wird bei ihm darum wieder eine neue Session gestartet.
gruß,
Severin