Bei Sessions blick ich nicht durch!

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Gonzo_w
Mitglied
Beiträge: 58
Registriert: 15.10.2002 16:02
Wohnort: Wien
Kontaktdaten:

Bei Sessions blick ich nicht durch!

Beitrag 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

Code: Alles auswählen

<?php
session_start();
echo $beispiel;
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:

Code: Alles auswählen

session.save_path = c:/php/sessions
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!
Wer nicht wettet, hat schon verloren .... www.bet-austria.com
Die österreichische phpBB Usergruppe!
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
WolfiZ

Beitrag 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
Benutzeravatar
Gonzo_w
Mitglied
Beiträge: 58
Registriert: 15.10.2002 16:02
Wohnort: Wien
Kontaktdaten:

Beitrag 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!
Wer nicht wettet, hat schon verloren .... www.bet-austria.com
Die österreichische phpBB Usergruppe!
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Advanced-Rookie
Mitglied
Beiträge: 124
Registriert: 04.10.2002 15:02
Kontaktdaten:

Beitrag 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.
Stell dir vor es ist Krieg und niemand geht hin.
Benutzeravatar
Gonzo_w
Mitglied
Beiträge: 58
Registriert: 15.10.2002 16:02
Wohnort: Wien
Kontaktdaten:

Beitrag 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 :(
Wer nicht wettet, hat schon verloren .... www.bet-austria.com
Die österreichische phpBB Usergruppe!
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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']);
?>
Benutzeravatar
Gonzo_w
Mitglied
Beiträge: 58
Registriert: 15.10.2002 16:02
Wohnort: Wien
Kontaktdaten:

Beitrag 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! :)
Wer nicht wettet, hat schon verloren .... www.bet-austria.com
Die österreichische phpBB Usergruppe!
Antworten

Zurück zu „Coding & Technik“