probleme mit sessions

irgendwie ist das programmieren mit ipsymcon anders als mit normalen webservern.

meine scripts laufen im internet auf meinen webservern ohne probleme, aber beim bauen eines lokalen admininterfaces in ipsymcon habe ich irgendwie probleme.

nun habe ich das problem beim bauen eines logins.

ich habe eine seite auf der ich meine zugangsdaten eingebe, die zugangsdaten werden an eine seite gegeben, die die zugangsdaten prüft gegen eine mysql db.

wenn die daten richtig sind, dann wird eine session wie folgt gestartet:

session_start();
$login=1;
$vid = $userdaten[‚vid‘];
session_register(„login“);
session_register(„vid“);
header(„Location: eingeloggt.php“);

und auf der eingeloggt.php prüfe ich normalerweise mit:

session_register(„login“);
if(!isset($_REQUEST[‚PHPSESSID‘])) {header(„Location: index.php“);};
if($_SESSION[‚login‘]!=1) {header(„Location: index.php“);};

ob man angemeldet ist. wenn nicht, kommt man wieder auf die startseite.

jedoch klappt das im ipsymcon überhaupt nicht, ich werde immer wieder direkt zum login geleitet. wenn ich den bereich in der seite auskommentiere und dann $_SESSION[‚login‘] eingebe, bekomme ich eine meldung „Undefined variable: _SESSION“.

wie gesagt, im web funktioner die seiten.

was mache ich hier falsch? hat ipsymcon hier besonderheiten? torro arbeitet im wiips doch auch mit sessions, oder? dann sollte ips das doch eigentlich können, oder?!?

@pleibling

hast Du das beachtet ??

Viele Grüsse Jürgen

wie meinst du das? ich übergebe ja nicht die daten an eine seite, sondern lade die in die session. dort lese ich die dann wieder aus.

oder habe ich das falsch verstanden?

ich habe auch was anderes versucht, wenn ich versuche die session zu beenden bekomme ich folgende fehlermeldung:

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in …

kann es sein, das die session gar nicht gestartet wurde?

oder mache ich was komplett falsch?

hat jemand von euch ein funktionierendes beispiel einer session in ips?

die session beende ich so:

session_unset();
$_SESSION=array();
session_destroy();

Hallo pleibling,

warum erfindest Du denn das Rad neu und nimmst nicht einfach den Session Teil von WIIPS? Man muss doch nicht alles doppelt und dreifach programmieren.

Gruss Torro

ich übergebe die Session immer mit im link. Anders hab ich es auch nicht hinbekommen, trotz allem probieren und Beispielscripten aus dem Netz.

Ich habs bei mir so gemacht:

index:


session_start();
if (!session_is_registered('SESSION_user'))
	$auth = 0;
else
{
	$auth = 1;
	echo "<meta http-equiv=refresh content=0;URL=hauptseite.php>";
}


$PHPSESSID = session_id();
echo "<form method=post action=login.php?PHPSESSID=$PHPSESSID>";
echo "<table width=60%>";
echo "<tr>";
echo "<td>Benutzername:</td>";
echo "<td>Passwort:</td>";
echo "<td></td>";
echo "</tr>";
echo "<tr>";
echo "<td><input type=text name=user maxlength=20></td>";
echo "<td><input type=password name=pass maxlength=20></td>";
echo "<td><INPUT TYPE=submit VALUE=Login></td>";			
echo "</tr>";
echo "</table>";
echo "</form>";

von da gehts dann beim Einloggen über eine Seite (login) wo mittles Funktion der User und das Password geckeckt wird (log= 0 oder 1).

login:
der User wird in der Session registriert:


$_SESSION["SESSION_user"] = $user;


if ($log==0)
{
	session_unset();
	session_destroy();
	
	echo "<font size=2 face=Verdana, Arial, Helvetica, sans-serif>Benutzer existiert nicht oder das Passwort ist falsch!</font>";	
	echo "<meta http-equiv=refresh content=2;URL=index.php>";
}
else
{
	echo "<meta http-equiv=refresh content=0;URL=hauptseite.php?PHPSESSID=$PHPSESSID>";
}

dann gehts zurück auf die Hauptseite.

Auf jeder Seite wird zuerst die Session auf Gültigkeit geprüft.
alle weiteren seiten:


session_id($PHPSESSID);
session_start();
if (!session_is_registered('SESSION_user'))
{
	$auth = 0;
	echo "<meta http-equiv=refresh content=0;URL=index.php>";
}	
else
{
	$auth = 1;
}

das $auth kann man sich in dem Fall sparen, da man mit dem refresh zurückgeworfen wird, wenn man nicht als User gültig ist.

Ist mit Sicherheit nicht die optimale Lösung. Ist auch mein erster Versuch mit Sessions - eine andere Variante habe ich nicht mit IPS hinbekommen.

klingt schonmal nciht schlecht. werde mal gleich versuchen mit dem sessionlink übergeben.

hast du schonmal versucht ob man werte, die in der session gespeichert sind überschreiben kann? sprich wenn du dich einloggst und aus der db ein wert gezogen wird und die variable bekannt ist, das man dann versucht den wert zu überschreiben?

sagen wir mal wir haben einen benutzer der heißt user, wenn der sich einloggt (z.b. seite die session lädt und werte aus db lädt login.php heißt) er dann seinen benutzernamen übershrieben kann (z.b. login.php?user=admin) um so z.b. auf einen anderen account zuzugreifen oder höhere berechtigungen zu erhalten?

sollte doch eigentlich nicht gehen, oder?

wer arbeitet hier noch mit sessions?

ich übergebe ja nur die Session-ID der Session, in der die Variablen gültig sind.
d.h. unter der SSID:3473843hj34hj4h23 sind variablen $user usw. bekannt…
d.h. bei der Übergabe im Link sieht man diese variablen nicht und hat auch keinen zugriff drauf… so würde ich das verstehen. Bin aber wie schon erwähnt was das angeht selber anfänger und laie.

Hallo,

also nochmal in Kurzform zu den Sessions, wie es im IPS funktioniert und sauber ist:

in der PHP.INI folgende Eintraege machen:

[Session]
session.save_handler = „files“
session.save_path = „C:\Programme\0.90-IP-SYMCON\web_data\session“
session.auto_start = 0
session.use_trans_sid = 1
session.name = „pt“

Dann kann man beispielsweise auch folgendes nutzen:
$_SESSION[’_query’] = $QUERY_STRING;
$_SESSION[’_self’] = $PHP_SELF;
$_SESSION[’_remote’] = $REMOTE_ADDR;

Wie es genau gemacht wird, schaut Euch am besten im WIIPS an, da wird es sehr ausgiebig benutzt.

Gruss Torro

hi torro,

mal eine verständnisfrage:

ich melde mich also an, wenn die daten richtig sind, dann starte ich eine session und lade da die daten rein (vorher habe ich natürlich die einstellungen in der php.ini vorgenommen):

session_start();
$_SESSION[’_test] = „eingeloggt“;

auslesen kann ich dann die daten ungefähr so:

if(!$_SESSION[’_test’] == „eingeloggt“) {echo("<meta http-equiv=refresh content=0;URL=index.php>"); };

kommt da nicht auch was mit session_register oder so?

danke für eure/deine hilfe :).

Hallo pleibling,

korrekt. Du musst nur aufpassen, dass die Session Daten auch tatsaechlich zu jedem Zeitpunkt da sind. Ich pruefe also vor der Verwendung, ob der jeweilige Eintrag vorhanden ist, anderenfalls setze ich im Fehlerfall einen Standard oder bringe Fehlermeldungen.

session_start();
$_SESSION[’_test] = „eingeloggt“;

auslesen kann ich dann die daten ungefähr so:

if(!$_SESSION[’_test’] == „eingeloggt“) {echo("<meta http-equiv=refresh content=0;URL=index.php>"); };

hier vorher pruefen, ob die Session Variable tatsaechlich vorhanden ist:

if (isset($SESSION[’_test’])) {
if(!$_SESSION[’_test’] == „eingeloggt“) {
echo("<meta http-equiv=refresh content=0;URL=index.php>");
}
else {
// Fehlerbehandlung
}

Nach einer geschweiften Klammer kommt uebrigens kein Kommata!

kommt da nicht auch was mit session_register oder so?

danke für eure/deine hilfe :).

nein, das brauchst Du hierbei nicht.

Gruss Torro

meine herren, du schläfst wohl nie ;). danke für deine schnelle antwort torro.

ich werde das heute abend mal umsetzen. bin mal gespannt. das wäre echt genial wenn das klappt mit dem session management :).

hi torro,

hab es mal so versucht wie du beschrieben hast.

wenn ich auf seite 1.php folgendes habe:

session_start();
$_SESSION[’_test’] = „eingeloggt“;

dann wird eine session datei erstellt und ich kann diese öffnen und sehe auch das die inhalte richtig eingetragen wurden.

wenn ich aber versuche auf seite 2.php die daten auszulesen mit:

echo($_SESSION[’_test’]);

dann bekomme ich ne fehlermeldung:

Notice: Undefined variable: _SESSION in E:\programme\IP-Symcon\web est\2.php on line 3

muß ich dann nicht irgendwie auf die session referenzieren oder so? oder session starten oder irgendwas in der richtung?

was passiert mit den session dateien? werden die vom webserver wieder nach einer zeit weggeräumt?

so klappt nun bei den beispiel. mein fehler war, das ich nicht session_start() drin hatte und vor allem, das ich die seite selber von hand aufgerufen hatte.

habe nun ein link gemacht afu seite 2.php und wenn ich den anklicke, dann sehe ich das automatisch die sid mit angehangen wird.

und die session dateien verschwinden auch nach ein paar minuten nutzung. so ist es fein :).

danke für eure hilfe torro, retarius und jheinz.