Seite 1 von 1
Bei Sessions blick ich nicht durch!
Verfasst: 19.02.2003 22:30
von Gonzo_w
Hi Leute!
Schön langsam verzweifel ich.
Der Titel lässt vielleicht vermuten, dass ich nicht verstehe, wozu Sessions gut sind, aber das Problem liegt woanders:
Hab mir schon etliche Tuts angesehen (da dürfte ja so ein Standard-Tutorial im Netz kursieren), aber es will nicht hinhaun!
Also wenn ich folgendes schreibe:
Code: Alles auswählen
<?php
session_start();
session_register("beispiel");
$beispiel = "test";
<a href="teil2.php">weiter</a>
?>
dann sollte ich doch als Ausgabe von folgender Datei teil2.php
den Inhalt der Variable bekommen, also test.
Aber es funzt nicht! Hab das Beispiel schon in einigen Variationen durchprobiert, aber nix geht!
Zur Info:
Da ich das auf meinem Heimrechner teste und WAMP installiert hab, hab ich mal folgende Zeile der php.ini geändert:
Ich hab PHP Version 4.1.1
Auszüge aus phpinfo:
http://www.8ung.at/knoerps/phpinfo.gif
Wär nett, wenn jemand das mal durchdenkt und mir verraten könnte, warum das nicht geht!
Verfasst: 20.02.2003 00:09
von PhilippK
Mal zwei mögliche Ansätze, ohne sich weiter mit dem Thema auseinandergesetzt zu haben.
1. Evtl. ein Problem mit der register_globals
php Manual hat geschrieben:Wenn Sie $_SESSION verwenden und register_globals deaktivieren, sollten Sie session_register(), session_is_registered() und session_unregister() nicht verwenden, wenn Ihre Scripte mit PHP 4.2 und niedriger funktionieren sollen. Sie können diese Funktionen ab 4.3 verwenden.
2. Die Session wird nicht übergeben, da Cookies deaktiviert sind. Versuch mal
Code: Alles auswählen
<?php
session_start();
session_register("beispiel");
$beispiel = "test";
?>
<a href="<?= append_sid('teil2.php'); ?>">weiter</a>
Gruß, Philipp
Verfasst: 20.02.2003 10:01
von WolfiZ
Hallo,
ich kann dir bei deinem Problem helfen!
Dein Code kann gar nicht funktionieren, da du die Variable "$bespiel" schon in der Session registrierst bevor du sie überhaupt angelegt hast!
Ausserdem kann es sein, das bei dir die Funktion Register_Globals auf off gesetzt ist! Deshalb musst du auf deiner Seite2.php die Variable mit dem Befehl " echo $_SESSION['beispiel'];" ausgeben.
Hier mal eine Lösung die funktioniert! (Bei mir zumindest)
Code: Alles auswählen
<?
session_start();
$beispiel="test";
session_register('benutzer');
?>
<a href="test2.php">weiter</a>
Code: Alles auswählen
<?
session_start();
if (session_is_registered('beispiel'))
{
echo $_SESSION['beispiel'];
}
?>
Ich hoffe ich konnte dir damit weiterhelfen!
Mfg
WolfiZ
Verfasst: 20.02.2003 21:06
von Gonzo_w
Hm, sind interessante Ansätze!
PhilippK hat geschrieben:1. Evtl. ein Problem mit der register_globals
php Manual hat geschrieben:Wenn Sie $_SESSION verwenden und register_globals deaktivieren, sollten Sie session_register(), session_is_registered() und session_unregister() nicht verwenden, wenn Ihre Scripte mit PHP 4.2 und niedriger funktionieren sollen. Sie können diese Funktionen ab 4.3 verwenden.
Hab mal die neueste PHP-Version gesaugt und installiert (4.3.1)
PhilippK hat geschrieben:2. Die Session wird nicht übergeben, da Cookies deaktiviert sind. Versuch mal
Code: Alles auswählen
<?php
session_start();
session_register("beispiel");
$beispiel = "test";
?>
<a href="<?= append_sid('teil2.php'); ?>">weiter</a>
Da wirft er mir einen Fatal Error aus, dass das eine undefinierte Funktion ist.
WolfiZ hat geschrieben:Dein Code kann gar nicht funktionieren, da du die Variable "$bespiel" schon in der Session registrierst bevor du sie überhaupt angelegt hast!
In allen Tutorials stand, dass das unbedingt am Anfang der Datei geschehen soll.
WolfiZ hat geschrieben:Ausserdem kann es sein, das bei dir die Funktion Register_Globals auf off gesetzt ist! Deshalb musst du auf deiner Seite2.php die Variable mit dem Befehl " echo $_SESSION['beispiel'];" ausgeben.
register_globals ist auf off, stimmt! Hab das auch gestern schon mit $_SESSION['beispiel'] versucht, ohne Erfolg!
WolfiZ hat geschrieben:Hier mal eine Lösung die funktioniert! (Bei mir zumindest)
Code: Alles auswählen
<?
session_start();
$beispiel="test";
session_register('benutzer');
?>
<a href="test2.php">weiter</a>
Code: Alles auswählen
<?
session_start();
if (session_is_registered('beispiel'))
{
echo $_SESSION['beispiel'];
}
?>
Also mein Stand der Dinge:
Hab mal wieder einiges probiert, wenn ich die Variable im Script mit einem Wert belege, dann klappts. Aber nun habe ich versucht, die Variable mittels Formular zu belegen, aber nichts!
Naja ich danke euch für eure Lösungsvorschläge! Werd mich da halt dahinterklemmen!
Verfasst: 20.02.2003 23:10
von PhilippK
Das kommt davon, wenn man zu viel phpBB schaut
Füge folgende Funktion hinzu:
Code: Alles auswählen
function append_sid($url, $non_html_amp = false)
{
global $SID;
if ( !empty($SID) && !preg_match('#sid=#', $url) )
{
$url .= ( ( strpos($url, '?') != false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
}
return $url;
}
Gruß, Philipp
Verfasst: 21.02.2003 18:17
von Advanced-Rookie
hab noch nie eine sessionfunktion benutzt, mach die immer selbst.
Sessions machen im prinzip nichts anderes als variablen übergeben, also auf die nächste Seite. Damit kann festgestellt werden ob du noch der gleiche benutzer bist wie eben. Deine Variable hat einen bestimmten Wert z.B. 349rjfer5u439 und den hast nur du, auf der nächsten seite schaut dein script z.B. in die Datenbank und überprüft ob einer mit der ID zur zeit auf den genutzten Seiten ist. Wenn ja ist deine Identität bestätigt.
Du lädst ja die Seiten nur vom Internet runter und wenn sie geladen ist, "weiß das Internet" nicht mehr ob du noch auf der seite bist oder schon woanders. Also musst du bestätigen, dass du schonmal auf der Seite zuvor warst, wo du z.B. das richtige login-passwort und benutzername eingegeben hast.
Verfasst: 23.02.2003 23:05
von Gonzo_w
So danke mal für die hilfreichen Posts, hab mich da jetzt herumgespielt, und habs (fast) zum laufen gebracht! Die Lösung war glaub ich, dass ich eben die neue PHP-Version installiert hab (was das genau verändert hat, weiß ich auch nicht).
Naja nun läufts, aber mit einem kleinen (oder eigentlich großen) Schönheitsfehler! Denn zusätzlich wirft er mir folgende Warnung aus:
PHP Warnung hat geschrieben: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
Also dann hab ich diese 2 Schlüssel auf off gesetzt, ändert aber nix dran, dass diese Warnung kommt.
Hm

Verfasst: 24.02.2003 10:24
von Pyramide
An deiner Stelel würde ich das über $_SESSION machen:
PHP-Handbuch hat geschrieben:Aus Gründen der Verbesserung der Sicherheit und der Lesbarkeit des Codes wird die Verwendung von $_SESSION (oder $HTTP_SESSION_VARS bei PHP 4.0.6 oder niedriger) empfohlen. Mit $_SESSION werden die Funktionen session_register(), session_unregister() und session_is_registered() nicht benötigt. Auf die Session-Variablen kann wie auf jede normale Variable zugegriffen werden.
Beispiel 1. Registrierung einer Variablen mit $_SESSION.
Code: Alles auswählen
<?php
session_start();
// Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS
if (!isset($_SESSION['zaehler'])) {
$_SESSION['zaehler'] = 0;
} else {
$_SESSION['zaehler']++;
}
?>
Beispiel 2. Aufheben der Registrierung einer Variablen mit $_SESSION und deaktiviertem register_globals.
Code: Alles auswählen
<?php
session_start();
// Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS
unset($_SESSION['zaehler']);
?>
Verfasst: 24.02.2003 18:51
von Gonzo_w
Aha danke Pyramide, werd das gleich mal machen! Hab zwar das $_SESSION-Array schon benutzt, aber nur um die Variable auszugeben, mal sehen, wie das funktioniert mit dem registrieren!
