PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu Sessions


pommespaula
13.08.2003, 18:41:55
So wo lieg das Problem????

Ich nehme ein ganz einfaches script



<?
session_start();
$_SESSION["peter"] = "Hallo Welt"
?>


Und im nächsten Script möchte ich dann halt die die Session_Variable wieder herauslesen.
Das sieht dann so aus:


<?
session_start();
echo $_SESSION["peter"];
?>


So nun gibt er mir im zweiten bis aus diese Warnungen und Notizen nichts aus.

In beiden Scripten bekomme ich die Warnung:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at d:serversession.php:8) in d:serversession.php on line 9

Und im zweiten zusätlich noch:

Notice: Undefined index: user in d:serversession2.php on line 19


Also was in Gottes Namen mach ich euigentlich falsch? Kann mir jemand bitte bitte helfen.
Über ein tutorial zum Thema Sessions würde ich mich auch sehr freuen.

Gweilo
13.08.2003, 19:27:55
session kannst du nur bevor du etwas an den browser sendest zugreifen, du darfst also vorher keine echo anweisung oder HTML ausgabe haben.
Das ist das selbe, wie bei header("location: bla.com");

pommespaula
14.08.2003, 04:54:47
Hey soweit danke, dass klap ja jetzt ganz gut.
Wafür benötige ich denn nun die Session ID?

Progman
14.08.2003, 11:53:08
Ohne die Session-ID weiß der Server nicht, welche Session geladen werden soll.
Das ist wie bei der Garderobe:

"Ihre Nummer Bitte?"
"184"
"Hier, Ihre Sachen"

(extrem Super vereinfacht, läuft natürlich ganz anders ab)

pommespaula
14.08.2003, 16:24:31
As klar danke für alles dann kann ich jetzt loslegen!!!!

Trialrider
15.08.2003, 09:36:11
@Progman:

...wie jetzt? Ich arbeite ohne Angabe der Session-IDs mit meinem Frontend für mehrere User, ohne dass dabei was schief geht (bis jetzt jedenfalls).

Bitte erklär mir das Prinzip "Gaderobe" etwas genauer, damit ich mich im Bedarfsfall drauf einstellen kann.

Vielen Dank, und freundliche Grüße

Steffen

chris17
15.08.2003, 10:30:28
Hallo zusammen,

hab da auch eine Frage zu Sessions.
Mit Mit session_start() erstellt man eine neue Session oder führt eine schon
bestehende Session fort, deren ID über eine GET-Variable oder ein Cookie
übermittelt wurde.
Im Erfolgsfall gibt die Funktion true zurück.

..ähm, und wenn ich die ID nicht übermittle, sondern immer wieder im Kopf des Skriptes session_start() verwende?

Geht das in Ordnung so, und wirkt sich das dann auf die Lebenszeit der Session aus?

Grüsse und Dank

chris17

Trialrider
15.08.2003, 10:40:36
Hi Chris17,

ich starte meine Skripte immer nur mit session_start(). Meines Erachtens wird damit auf dem Server eine neue Session iniialisiert und wenn du den Browser schließt, dann ist diese erledigt, aus, vorbei... bzw. mit session_destroy() wird die gestartete beendet/zerstört.

Also, kurzum, ich komme (noch) ohne Sesion-ID aus :)

Freundlicher Gruß

Progman
15.08.2003, 11:16:54
session_start(); muss auf jede Seite, sonst wird halt keine Session gestartet/ausgelesen. Mit der Session-ID wird nur angegeben welche Session der Server laden soll.

Benutzer1: "Ich hätte gerne meine Klamotten wieder"
Garderobe: "Ihre Nummer?"
Benutzer1: "164"
Garderobe: "Hier, ihre Sachen"
Benutzer1: "Packen sie den Schirm in die Garderobe, ich hol ihn später ab"
Garderobe: "OK"
(Die Session mit der ID wurde geladen)

Benutzer2: "Ich möchte meine Sachen hier gerne lagern"
Garderobe: "Haben sie schon eine Nummer?"
Benutzer2: "Nope"
Garderobe: "Okay, dann kriegen sie diese hier: 450, vergessen sie sie nicht"
Benutzer2: "450, ok, merk ich mir"
(Er hatte keine Session bzw. es wurde keine SID übergeben. Das System erstellt dann eine neue Session)

Benutzer1: "Ich hätte gerne meine Sachen wieder"
Garderobe: "Ihre Nummer?"
Benutzer1: "Fuck, hab ich vergessen. Aber es war ein blauer Schirm"
Garderobe: "Tut mir Leid, ohne die Nummer kann ich nix machen"
(Wenn die SID nicht übermittelt wurde, egal ob GET, POST oder COOKIE, können die Session-Daten nicht geladen werden. Es trifft dann automatisch der 2. Fall in Kraft, eine neue Session wird generiert. Ohne einer Session-ID sind die alten Daten verloren)

*Benutzer2 hat sich die Nummer von Benutzer1 geklaut und gemerkt*
Benutzer2: "ich hätte gerne meine Sachen wieder"
Garderobe: "Ihre Nummer?"
Benutzer2: "164"
Garderobe: "Hier ihre sachen, ein blauer Schirm"
Benutzer2: "Danke" *rennweg*
(Wenn man eine Session-ID von jemand anders hat, kann man sie ohne probleme 'klauen', da das Session-System keine eingebaute Sicherheitssperre hat. Deswegen sollte man bestimmte Merkmale eines Benutzers mitspeichern)

Benutzer3: "Ich möchte gern das hier lagern"
Garderobe: "Ihre Nummer ist 320, merken sie sich die"
Benutzer3: "Okay"
Garderobe: "Warten sie ich brauch noch ein Foto..."
*klick*
Garderobe: "...Ok Danke, wiedersehen"
(Oft nimmt man hier die IP des Users)

Benutzer4: "Ich möchte gerne meine Sachen"
Garderobe: "Ihre Nummer?"
Benutzer4: "320"
Garderobe: "Hier ihre... Momentmal, das sind sie ja garnicht. Ich hab ein Foto gemacht und da sehen sie ja total anders aus. Verpissen sie sich"
(Ein andere User mit einer anderen IP kommt nicht an die Session)

Benutzer1: "Ich kann mich an meine Nummer wieder erinnern, es ist 164"
Garderobe: "Tut mir Leid, aber ihre Sachen haben wir schon weggeschmissen. Sie lagen schon zu lange in der Garderobe"
(Wenn eine Session nach 30min (Voreinstellung) nicht angerührt wird, löscht der Server die Session. Bei mir Lokal klappt dies aber nicht)

Benutzer5: "Ich möchte gerne meine Sachen"
Garderobe: "Ihre Nummer?"
Benutzer5: "320"
Garderobe: "Foto passt, hier ihre Sachen, auf Wiedersehen"
(Obwohl die Session dem Benutzer3 gehört, konnte sich Benutzer5 die Sachen abholen. Dies konnte er weil er der Zwillingsbruder war. In der Realität passiert das, wenn mehrere Benutzer über eine Verbindung ins Internet gehen und der Server nur die IP gespeichert hat. Es ist also nicht möglich, eine Session 100% gegen Diebstahl zu sichern, aber mit dem Speichern der IP kann man es ganz schön erschweren)



<?php
session_start();
if(!isset($_SESSION['IP'])) {
$_SESSION['IP'] = $_SERVER['REMOTE_ADDR']
}
if($_SERVER['REMOTE_ADDR'] != $_SESSION['IP']) {
die('Klauen geht nicht.');
}
/*
Weiter im Programm
*/
?>


http://tut.php-q.net/sessions.html

Noch fragen? *g*

chris17
15.08.2003, 11:19:58
Hi Trialrider,

Danke für die Antwort!
Weisst Du noch, ob sich Diese Vorgehensweise auf die Lebenszeit der Session auswirkt?
Fängt dann bei jedem session_start(),die "session.gc_maxlifetime" wieder "von Vorne" an zu zählen?

Gruss chris17

@Progman

Suppie :-)

Trialrider
15.08.2003, 11:39:01
Hi Progman: gut, jetzt hab ichs auch verstanden *schmunzel* - Nein, im Ernst - Stoff gut vermittelt.

@Chris17: Die Lebenszeit ist dann unbegrenzt - bei mir jedenfalls (Office, Home). Schließe ich den Browser, dann ist die aktuelle Session abgehakt, aber die Daten stehen noch im Verzeichnis. Beim zerstören ist auch die Session-Datei fort.

@Progman: kann man in dem Zusammenhang auch eine alte Session wieder öffnen, wenn man die ID ("sess_123456dfgghtt" -> "123456dfgghtt") hat?

Gruß und schönes Wochenende.

Steffen

Progman
15.08.2003, 12:05:25
Original geschrieben von Trialrider
Progman: kann man in dem Zusammenhang auch eine alte Session wieder öffnen, wenn man die ID ("sess_123456dfgghtt" -> "123456dfgghtt") hat?
yop

cubichead
15.08.2003, 17:46:34
Die SessionID wird meist automatisch in einem Cookie
beim User gespeichert (Servereinstellung).
Aktzeptiert dieser keine Cookies, muss die SessionID per $_GET weitergegeben werden. Man kann den Server auch so konfigurieren, das
er die SessionID automatisch an die Url hängt, das soll aber recht
viel Performance kosten, hab es selbst nie ausprobiert.

Gruutz cubichead

chris17
19.08.2003, 14:14:38
Hallo zusammen,

.. ich bin mir immer noch unsicher wegen der SessionID.

In Selfphp, im Tutorial von Progman lese ich, man muss die SessionID per GET/POST/COOKIE übermitteln. cubichead sagt das auch.

..ähm, und wenn ich die ID nicht übermittle, sondern immer wieder im Kopf des Skriptes session_start() verwende?
Irgendwie funktioniert das, ich kann dann auf jeder Seite auf die gespeicherten Werte in der Session zugreifen, ohne das ich jemals die SessionID übergebe...
Trialrider scheint es genauso zu machen. Ist das "Zufall", dass es klappt?

Bin über alle weiteren Infos dankbar!

Grüsse

chris17

P.S.: Noch was, wenn der Benutzer einfach seinen Browser schliesst, ohne dass session_destroy() zum Zuge kam, liegen ja die Sessions auf dem Server rum.
Wie handhabt Ihr das?

Trialrider
19.08.2003, 14:57:10
Hi Chris,

da wirst du wohl von Hand löschen müssen oder bastelst dir ein Skript.
Dazu musst du dann allerdings nach session_start() die Session-ID erstmal irgendwo ablegen (File, DB_Tab,...). Wenn dein User sich zBsp. richtig ausloggt, dann streichst du die ID wieder aus der Tabelle oder File osw. Wenn er nur den Browser schließt, liegt die Session noch rum. Diese kannst du dann anhand der verbliebenen ID aufrufen und killen über ein Admin-Skript oder CronJob...

Ich hoffe, ich habe richtig gedacht. Hab's selbst ncoh nicht gemacht, aber ich denke es sollte klappen und müssen werd ichs auch bald.

Gruß, Trialrider

chris17
11.09.2003, 13:51:39
@Admins
Tschuldigung, hab' mich beim Quoten vertan!!!

Bitte löschen!!