PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : session id


todddt
08.02.2006, 10:53
hallo zusammen,
ich bins nochmal
ich hab mal eine Frage, die wahrscheinlich sehr simple ist, aber ich scheiter leider daran.

ich bin dabei einen sehr einfachen online-shop zu erstellen, eigentlich nur um php besser kennenzulernen (bin absolutuer neuling).

um nun eine eindeutige zuordnung der bestellung zu gewährleisten, wollte ich die sessioid auslesen und beim hineinlegen in den warenkorb in einer spalte ablegen. doch irgendwie klappt das nicht ganz.

hab folgenden code auf der index.php seite benutzt

<?php
session_start();
?>
<html>
...


später im html code habe ich dann geschrieben

<?php
$id= session_id();
echo $id;
?>

die session id wird auch ausgegeben (nur als test), aber es tauchen warnmeldungen wg session_start() auf:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ...)

liegt diese warnmeldung daran, dass ich einen lokalen server xampp benutzte. ich programmiere und probiere offline.

aber zu meiner hauptfrage:
wie bekomme ich es hin, dass die einmal generierte session id solange aktiv ist, bis man die homepage schließt. es soll also immer die gleiche session id sein solange man sich auf der hp befindet egal auf welcher seite. geht das überhaupt?
ich habe ja einmal start-session auf der index.php benutzt. jetzt wird aber auch z.b. durch aktualisieren jeweils eine neue session id verteilt. kann man das auch sperren? ansonsten würde ja ein erneutes betreten der index.php seite die vorherige bestellung hinfällig machen.

danke schon mal
todddt

StGaensler
08.02.2006, 14:47
Cannot send session cookie - headers already sent byDein session_start() muss vor jeglichen anderen html-Code oder php-Code, der bereits einen Output erzeugt.
Das ein Reload eine neue Session-ID erzeugt ist (fast) logisch: Die Session-ID wurde ja nicht im Cookie gespeichert (siehe die zitierte Fehlermeldung), und session_start() wird ja wieder aufgerufen. Du musst also dafür sorgen, dass eine neue Session-ID nur vergeben wird, wenn der User noch keine Session-ID hat. Sollte so funktionieren:if(session_id()==""){
session_start();
} else {
# der User hat schon eine Session-ID
}

Viele Grüße,
Stefan

todddt
10.02.2006, 09:32
hallo und danke für die Antwort.
leider funktioniert das noch nicht. sobald ich die indexseite verlasse, wird eine neue session_id generiert.
muss ich eventuell mit frames arbeiten , sodass ein frame (z.B. top-frame) stehenbleibt und die session-id weitergibt. (hoffentlich ist die frage nicht gar so dumm)

Stefan Gaensler schrieb:
Das ein Reload eine neue Session-ID erzeugt ist (fast) logisch: Die Session-ID wurde ja nicht im Cookie gespeichert (siehe die zitierte Fehlermeldung), und session_start() wird ja wieder aufgerufen.

wie bekomme ich es denn hin, dass die session im cookie gespeichert wird? Oder muss das gar nicht? aber trotzdem bekomme ich auch mit den neuen Programm zeilen diese Fehlermeldung. liegt das nur an meinem lokalen xampp?
danke todddt

todddt
13.02.2006, 12:59
es war ein dummer fehler, ich hatte
<?
session_start();
?>
nicht als aller erstes vor dem
<html>
geschrieben.

es stand noch
<?
include...
session_start();
?>
davor, deswegen wurde immer eine neue nummer generiert.

zum unterdrücken der warnmeldung nehme ich jetzt ein @ zeichen

@session_start();

und für die übergabe zwischen den seiten bei browsern, die cookies nicht zulassen ein fallback. mit dem restrisiko des fallbacks muss man halt leben glaub ich.

<a href="../index.php?<?echo SID;?>">startseite</a>