PHP Konstante SID in XAMPP
Christian Wansart
- php
0 Felix Riesterer0 Tom0 Blaubart
Nabend,
ich habe mir gerade eben XAMPP geladen und habe ein kleines Beispiel für Sessions gebastelt:
~~~php
<?php
session_start();
if(!isset($_SESSION["aufrufe"])) $_SESSION["aufrufe"] = 0;
else $_SESSION["aufrufe"]++;
echo "Anzahl Aufrufe: ".$_SESSION["aufrufe"]."<br>\n";
echo "<a href="s.php?".SID."">Nächste Seite</a>";
?>
Auf meinem lokalen XAMPP Server hat die Konstante SID keinen Inhalt, auf einem Webserver aber schon. Mit der Funktion `session_id();`{:.language-php} wird ein Wert erzeugt.
Was ist denn nicht okay? Ist das denn kein Standard, dass das aktiv ist? Muss ich mir da nun gedanken machen, dass SID nicht aktiv ist, wenn ich für jemand anderen etwas schreibe?
Danke,
Squall
Lieber Christian,
meines Wissens enthält SID nur dann einen Wert, wenn der Browser für diese Website keine Cookies zulässt.
Da Du uns nichts über den verwendeten Browser verrätst, kann man nur raten, dass Du mit dem IE unterwegs bist, der für Deinen lokalen Webserver Cookies erlaubt (daher ist SID "leer"), für die Seite im Netz jedoch nicht (SID enthält "PHPSESSID=ljydg8ovbhllk" oder so ähnlich).
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hi,
meines Wissens enthält SID nur dann einen Wert, wenn der Browser für diese Website keine Cookies zulässt.
Ja, so etwas habe ich auch schon gelesen, aber auf meinem Webserver wird es mit dem selben Browser und den gleichen Einstellungen.
Da Du uns nichts über den verwendeten Browser verrätst, kann man nur raten, dass Du mit dem IE unterwegs bist, der für Deinen lokalen Webserver Cookies erlaubt (daher ist SID "leer"), für die Seite im Netz jedoch nicht (SID enthält "PHPSESSID=ljydg8ovbhllk" oder so ähnlich).
Wieso davon ausgehen, dass ich IE verwende? Ich meine, es könnte ja genauso gut sein, dass ich unter Linux online bin und von IE noch nie etwas gehört habe. Ich denke daher, dass man das nicht unbedingt pauschalisieren kann. :\ Also ich verwende Firefox 3, unter Linux wie auch unter Windows. Cookies sind an. Aber wie bereits gesagt, auf dem Webserver funktioniert es ja nur eben Lokal nicht. :S
Danke für die Antwort,
Gruß Christian Wansart
Lieber Christian,
Wieso davon ausgehen, dass ich IE verwende?
ich bin vom IE deshalb ausgegangen, da der ein Zonen-basiertes "Sicherheitskonzept" hat, sodass das Akzeptieren von Cookies durchaus zu einer unterschiedlichen Handhabung zwischen localhost und entfernten Servern führen kann, was nicht unbedingt auf den ersten Blick klar wird oder gar einleuchtet.
Ich wollte Dir nicht zu nahe treten. Dass Du den FF einsetzt zeigt mir, dass das Problem komplexer sein muss, als ich mir beim ersten Lesen Deines Posts habe vorstellen können. Sorry.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Guten Morgen Felix,
Ich wollte Dir nicht zu nahe treten. Dass Du den FF einsetzt zeigt mir, dass das Problem komplexer sein muss, als ich mir beim ersten Lesen Deines Posts habe vorstellen können. Sorry.
Zu nahe treten, nun ja. Ich bin einfach der Auffassung, dass diese Pauschalisierung aufhören sollte. :) Ich hasse es, dass überall gesagt wird, alle benutzen Windows, alle nutzen Internet Explorer, alle nutzen Word (mit dem .doc-Format) usw.
Also wenn es wirklich komplexer ist, wird es wahrscheinlich an der Serverkonfiguration liegen. Ich denke ich frage meinen Webhoster einmal, ob er mit die Daten geben kann, damit ich sie mit meinem lokalen Server abgleichen kann.
Aber normalerweise sollte SID vorhanden sein, oder? Zumindest wenn keine Cookies aktiviert sind.
Danke,
Gruß Christian Wansart
Hello,
~~~php
<?php
error_reporting(E_ALL);
session_start();
if(!isset($_SESSION["aufrufe"]))
{
$_SESSION["aufrufe"] = 0;
}
else
{
$_SESSION["aufrufe"]++;
}
echo "Anzahl Aufrufe: ".$_SESSION["aufrufe"]."<br>\n";
if (isset(SID)) ## Wenn SID existiert, wurde eine Session gestartet
{
if (strlen(SID)== 32) ## Wenn SID einen String von 32 Zeochen Länge enthält
{ ## wird es die Session-Nummer sein.
$id = SID;
}
else ## anderenfalls holen wir uns
{
$id = session_id(); ## die Sessionnummer aus der Sessionverwaltung
}
echo "<a href="s.php?$id>Nächste Seite</a>";
}
else
{
echo "<a href="s.php>Nächste Seite</a>";
}
?>
Das ist jetzt nur ein Beispiel. Die Sessionnummer können wir ns immer über session\_id() beschaffen, wenn eine Session gestartet wurde. SID existiert aber auch nur dann...
Grüße aus Dortmund
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Tach.
if (isset(SID)) ## Wenn SID existiert, wurde eine Session gestartet
Das funktioniert so nicht. Ob eine Konstante existiert, bekommst Du über defined() heraus, nicht über isset().
Wenn SID einen String von 32 Zeochen Länge enthält
wird es die Session-Nummer sein.
Auf solche Spielchen solltest Du Dich seit nicht verlassen. Die Verbindung von session.hash_function und session.hash_bits_per_character kann auch zu ganz anderen Längen der ID führen.
$id = SID;
else
$id = session_id();
Das liefert am Ende nicht das Gleiche für den Einbau in den Link. Über session_id() bekommst Du tatsächlich nur die ID. Den Namen (muß nicht PHPSESSID sein) liefert session_name().
Hello,
if (isset(SID)) ## Wenn SID existiert, wurde eine Session gestartet
Das funktioniert so nicht. Ob eine Konstante existiert, bekommst Du über defined() heraus, nicht über isset().
Du hast Recht, als ich es bereits abgeschickt hatte, kam mir das auch in den Sinn
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Tach.
Mit der Funktion
session_id();
wird ein Wert erzeugt.
Wo?
Was ist denn nicht okay? Ist das denn kein Standard, dass das aktiv ist? Muss ich mir da nun gedanken machen, dass SID nicht aktiv ist, wenn ich für jemand anderen etwas schreibe?
Funktioniert der Session-Mechanismus denn lokal auch? Falls dem so ist, SID lokal aber leer ist, kommt die Session-ID dort wohl über einen Cookie und auf dem anderen Server über die URL. Letzteres üblicherweise deshalb, weil session.use_only_cookies oder session.use_cookies ausgeschaltet sind und session.use_trans_sid aktiviert ist. In diesem Fall müßtest Du sehen können, daß Name und ID der Session automatisch an den Link gehängt werden. Möglicherweise unterscheiden sich also die Einstellungen beider Server bzgl. Sessions.
Ansonsten solltest Du für beide Server überprüfen, welche Daten sie mit dem Browser über HTTP tatsächlich austauschen. Für den Firefox gibt es bestimmt auch eine Erweiterung, die Dir dabei behilflich ist.