PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : session_start() -> unterschied linux/windows?



david.preuss
27-06-2004, 20:15
hallo,

ich hab mir ein einfaches sicherheitskonzept gebastelt, welches die session_id an die url anhängt und diese dann mit der aktuellen vergleicht.

nun meine frage:

ich habe das ganze auf einem windows rechner programmiert auf dem auch der apache lief (apachefriends.org). nun habe ich mir aber einen linux server eingerichtet (auf dem die der gleich apache für linux läuft...). nun funktioniert allerdings die sache mit den session_ids nicht mehr...

hier die fehlermeldung:

session_start(): Cannot send session cookie - headers already sent by (output started at /opt/lampp/htdocs/.../.../tpl/header.php:1) in opt/lampp/htdocs/.../.../main_cls.php on line 14

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /opt/lampp/htdocs/.../.../tpl/header.php:1) in opt/lampp/htdocs/.../.../main_cls.php</b> on line 14

wieso funktioniert das nicht?

ich habe mehrere methoden/funktionen die mit der session_id arbeiten. liegt es vielleicht daran, dass ich vor jeder session_id ausgabe die funktion session_start aufrufe?

ich hoffe es kann mir jemand weiterhelfen!

gruß, david!

Gaert
27-06-2004, 20:25
Hallo David,

die Fehlermeldung wird erzeugt, wenn du eine cookie basierte Session starten möchtest (die SessionID wird in einem Cookie gespeichert, anstatt an jede URL angehängt zu werden) und du vor dem session_start() Aufruf bereits eine Ausgabe erzeugt hast (in deinem Fall das erste mal bei /opt/lampp/htdocs/schermbecker_schaufenster/cms/tpl/header.php Zeile 1.

Grund:
Cookies werden über HTTP Header gesetzt - wenn Output produziert wird werden erst die Header an den Browser übermittelt und können dann nicht mehr manipuliert werden.

Zu deinem Sicherheitskonzept - ich verstehe nicht wozu das gut sein soll - erklär mal bitte dieses Konzept etwas genauer.

Gruß,

Gaert

david.preuss
27-06-2004, 20:32
danke für deine antwort!

das "konzept" besteht aus einem ganz einfachen vergleich der session_ids:

if($id == session_id())... :D


also hab ich das jetzt richtig verstanden, dass die funktion session_start() nur einmal pro seite aufgerufen werden muss?

aber nochmal die frage: wieso hat das auf dem wampp funktioniert?



gruß david

Gaert
27-06-2004, 20:42
das "konzept" besteht aus einem ganz einfachen vergleich der session_ids:

if($id == session_id())... :D


Sorry, aber das ergibt für mich keinen Sinn - ich verstehe den nutzen nicht, respektive was daran die Sicherheit erhöht... woher bekommst du denn $id?

Beim WAMP wird wahrscheinlich session.use_cookies auf false stehen (in der php.ini)

Zu deiner Frage: session_start muss nur einmal aufgerufen werden.

Tip: RTFM -> http://de2.php.net/session ;)

Gruß,

Gaert

david.preuss
27-06-2004, 20:48
Sorry, aber das ergibt für mich keinen Sinn - ich verstehe den nutzen nicht, respektive was daran die Sicherheit erhöht... woher bekommst du denn $id?

$id ist die session_id() der vorigen seite und wird an die url angehängt. $id wird mit der aktuellen session_id() verglichen. wenn diese nicht übereinstimmen muss man sich sich neu anmelden... man kann die url also nicht direkt öffnen... ist einfach, aber für' n anfang reichts... :D



gruß, david...

Gaert
27-06-2004, 23:39
Hallo,

einfacher und effektiver:

Einloggen:
--> $_SESSION['login']=true;

Check:
-->
if (!$_SESSION['login']) {
// einloggen!
die()
}

Damit sparst du dir das unnötige ID übergeben.

localhost
01-07-2004, 11:22
was ist eindlich der unterschit zwiche
session_start();
und
@session_start();

für was ist das @

mehlvogel
01-07-2004, 11:24
Das @ unterdrückt die Fehlermeldung, also es wird keine Fehlermeldung ausgegeben wenn das @ davor steht.