session_id()

Hallo,

ich habe ein php Script. Die Seite heist admin.php Am start steht:

<?php

session_name("test");
session_start();
if(!isset($_SESSION["b"])){$_SESSION["b"] = "";}
if(!isset($_SESSION["p"])){$_SESSION["p"] = "";}

$ses = session_id();

if(isset($_REQUEST['session'])){$session =
$_REQUEST['session'];}else{$session = "0";}

echo $session; // Nach jedem Formularaufruf wieder neu warum ??

if($session == $ses)
{
echo "ok";
}else
{
echo "nicht ok"; //es gibt immer nur diese Ausgabe
}
?>

Im Script steht:

echo "<form action=\"admin.php?code=1&session=";
if(isset($ses)) echo urlencode($ses);
echo "\" method=\"post\" name=\"abfrage\" target=\"_self\">\n";

Ich rufe also mit dem Formular die seite selbst wieder auf.
Im Script prüfe ich dann, ob die Variable ses und die Variable session, die
ich übergebe, übereinstimmen.

Ich stelle mir das laut Manual folgendermaßen vor:

Ich starte die Seite zum ersten Mal, es existiert keine Session, also wird
die Session mit Namen "test" neu angelegt. Mit session_start(); wird nun
die Session gestartet. Über session_id(); lese ich dann die ID der
aktuellen Session aus. Diese übergeb ich mit dem Link im Formular duech die
Variable "session". Jetzt rufe ich per submit Button die Seite erneut auf.
Die Session "test" existiert, wird also nicht neu angelegt. session_start()
nimmt die Session wieder auf. session_id() gibt mir wieder die ID der
aktuellen Session.

Da es sich um die gleiche Session handelt müsste doch jetzt der Wert aus
session_id() der gleiche sein, wie vorher. Also der Wert aus der Variablen
"session", die ich mit dem Formular übergeben habe. Ist er aber nicht. Die
session_id() wird jedesmal neu festgelegt.

Warum?

Mathias
letters [ Fr, 09 November 2007 12:35 ] [ ID #1866941 ]

Re: session_id()

Mathias Fiedler schrieb:

> echo "<form action=\"admin.php?code=1&session=";
> if(isset($ses)) echo urlencode($ses);
> echo "\" method=\"post\" name=\"abfrage\" target=\"_self\">\n";

Tipp: HTML versteht auch einfache Hochkommas. Damit lässt sich dieser
Backslash-Wust deutlich übersichtlicher schreiben:

echo "<form action='admin.php?code=1&session=";
if(isset($ses)) echo urlencode($ses);
echo "' method='post' name='abfrage' target='_self'>\n";

> Da es sich um die gleiche Session handelt müsste doch jetzt der Wert aus
> session_id() der gleiche sein, wie vorher. Also der Wert aus der Variablen
> "session", die ich mit dem Formular übergeben habe. Ist er aber nicht. Die
> session_id() wird jedesmal neu festgelegt.

Hast Du im Browser Cookies deaktiviert? Das könnte die Ursache sein.

Gruß. Claus
Claus Reibenstein [ Fr, 09 November 2007 12:49 ] [ ID #1866942 ]

Re: session_id()

Am Fri, 09 Nov 2007 12:49:42 +0100 schrieb Claus Reibenstein:

> Mathias Fiedler schrieb:
>
>> echo "<form action=\"admin.php?code=1&session=";
>> if(isset($ses)) echo urlencode($ses);
>> echo "\" method=\"post\" name=\"abfrage\" target=\"_self\">\n";
>
> Tipp: HTML versteht auch einfache Hochkommas. Damit lässt sich dieser
> Backslash-Wust deutlich übersichtlicher schreiben:
>
> echo "<form action='admin.php?code=1&session=";
> if(isset($ses)) echo urlencode($ses);
> echo "' method='post' name='abfrage' target='_self'>\n";
>
>> Da es sich um die gleiche Session handelt müsste doch jetzt der Wert aus
>> session_id() der gleiche sein, wie vorher. Also der Wert aus der Variablen
>> "session", die ich mit dem Formular übergeben habe. Ist er aber nicht. Die
>> session_id() wird jedesmal neu festgelegt.
>
> Hast Du im Browser Cookies deaktiviert? Das könnte die Ursache sein.
>
> Gruß. Claus

Danke, Danke, Danke!
Genau das wars. Aber eben genau das wollte ich doch umgehen. Ich wollte die
session doch gerade ohne Cookies übergeben. Wie kriege ich denn das jetzt
hin?

Mathias
letters [ Fr, 09 November 2007 13:02 ] [ ID #1866944 ]

Re: session_id()

Mathias Fiedler schrieb:

> Am Fri, 09 Nov 2007 12:49:42 +0100 schrieb Claus Reibenstein:
>
>> echo "<form action='admin.php?code=1&session=";

Auf diese Zeile komme ich unten nochmal zurück.

>> Hast Du im Browser Cookies deaktiviert? Das könnte die Ursache sein.
>
> Danke, Danke, Danke!
> Genau das wars. Aber eben genau das wollte ich doch umgehen. Ich wollte die
> session doch gerade ohne Cookies übergeben. Wie kriege ich denn das jetzt
> hin?

Mit der magischen Konstanten SID, die Du in die obige Zeile einfügen musst:

echo "<form action='admin.php?", SID, "&code=1&session=";

Diese Variante funktioniert sowohl mit als auch ohne Cookies.

Gruß. Claus
Claus Reibenstein [ Fr, 09 November 2007 13:10 ] [ ID #1866947 ]

Re: session_id()

Mathias Fiedler schrieb:

>> echo "<form action='admin.php?code=1&session=";
>> if(isset($ses)) echo urlencode($ses);
>> echo "' method='post' name='abfrage' target='_self'>\n";
>>
>>> Da es sich um die gleiche Session handelt müsste doch jetzt der Wert aus
>>> session_id() der gleiche sein, wie vorher. Also der Wert aus der Variablen
>>> "session", die ich mit dem Formular übergeben habe. Ist er aber nicht. Die
>>> session_id() wird jedesmal neu festgelegt.
>>
>> Hast Du im Browser Cookies deaktiviert? Das könnte die Ursache sein.
>
> Danke, Danke, Danke!
> Genau das wars. Aber eben genau das wollte ich doch umgehen. Ich wollte die
> session doch gerade ohne Cookies übergeben. Wie kriege ich denn das jetzt
> hin?

Ah, da wird mir Dein Vorhaben jetzt klar. Denn ich war anfänglich etwas
verwirrt über dieses zusätzliche Übergeben der SessionID.

Nun, Dir fehlt etwas grundlegendes Wissen zu Sessions. Erstmal kann PHP
auch automatisch die ID übergeben, sofern Cookies deaktivert sind. Dazu
ist in der Konfiguration session.use_trans_sid zu aktivieren. Damit hängt
PHP die ID automatisch an alle internen Links, bzw. setzt in Formulare
ein entspr. Hidden-Feld.
Manuell geht es am leichtesten über die Konstante SID, wie Claus schon
schrieb.

Desweiteren konnte Deine Variante nicht funktionieren, weil Du die ID
falsch übergeben hast. Deine Session heißt "test" - das hast Du ja selber
per session_name() so festgelegt. Dann übergibst Du jedoch die SessionID
mit der Variablen "session". Das geht natürlich nicht. In Deinem Falle
müsste es "test=$sess" heißen. Das meinte ich hauptsächlich mit
"grundlegendes Wissen".


Gruß
JPM
dev-null-use-reply-ad [ Fr, 09 November 2007 13:33 ] [ ID #1866950 ]

Re: session_id()

Am Fri, 09 Nov 2007 13:33:17 +0100 schrieb Jens Peter Moeller:

> Mathias Fiedler schrieb:
>
>>> echo "<form action='admin.php?code=1&session=";
>>> if(isset($ses)) echo urlencode($ses);
>>> echo "' method='post' name='abfrage' target='_self'>\n";
>>>
>>>> Da es sich um die gleiche Session handelt müsste doch jetzt der Wert aus
>>>> session_id() der gleiche sein, wie vorher. Also der Wert aus der Variablen
>>>> "session", die ich mit dem Formular übergeben habe. Ist er aber nicht. Die
>>>> session_id() wird jedesmal neu festgelegt.
>>>
>>> Hast Du im Browser Cookies deaktiviert? Das könnte die Ursache sein.
>>
>> Danke, Danke, Danke!
>> Genau das wars. Aber eben genau das wollte ich doch umgehen. Ich wollte die
>> session doch gerade ohne Cookies übergeben. Wie kriege ich denn das jetzt
>> hin?
>
> Ah, da wird mir Dein Vorhaben jetzt klar. Denn ich war anfänglich etwas
> verwirrt über dieses zusätzliche Übergeben der SessionID.
>
> Nun, Dir fehlt etwas grundlegendes Wissen zu Sessions. Erstmal kann PHP
> auch automatisch die ID übergeben, sofern Cookies deaktivert sind. Dazu
> ist in der Konfiguration session.use_trans_sid zu aktivieren. Damit hängt
> PHP die ID automatisch an alle internen Links, bzw. setzt in Formulare
> ein entspr. Hidden-Feld.
> Manuell geht es am leichtesten über die Konstante SID, wie Claus schon
> schrieb.
>
Nun ich denke mal, das wußte ich schon. Da ich die php.ini nicht ändern
kann blieb eigentlich nur dieser weg. Ich übergebe die sessionID in einr
Variablen und vergleiche die dann auf der nächsten Seite. Das hat ja auch
funktioniert. Ich übergebe also die sessionID in einer Variablen, dann lese
ich auf der Empfängerseite wieder die sessionID aus und vergleiche die
beiden Werte. Das ist allerdings ok. Wenn ich im Link die session festlege,
kann diese ja manipuliert werden.

> Desweiteren konnte Deine Variante nicht funktionieren, weil Du die ID
> falsch übergeben hast. Deine Session heißt "test" - das hast Du ja selber
> per session_name() so festgelegt. Dann übergibst Du jedoch die SessionID
> mit der Variablen "session". Das geht natürlich nicht. In Deinem Falle
> müsste es "test=$sess" heißen. Das meinte ich hauptsächlich mit
> "grundlegendes Wissen".
>

siehe oben

Gruß

Mathias

> Gruß
> JPM
letters [ Fr, 09 November 2007 16:42 ] [ ID #1866965 ]

Re: session_id()

Am Fri, 09 Nov 2007 13:10:33 +0100 schrieb Claus Reibenstein:

> Mathias Fiedler schrieb:
>
>> Am Fri, 09 Nov 2007 12:49:42 +0100 schrieb Claus Reibenstein:
>>
>>> echo "<form action='admin.php?code=1&session=";
>
> Auf diese Zeile komme ich unten nochmal zurück.
>
>>> Hast Du im Browser Cookies deaktiviert? Das könnte die Ursache sein.
>>
>> Danke, Danke, Danke!
>> Genau das wars. Aber eben genau das wollte ich doch umgehen. Ich wollte die
>> session doch gerade ohne Cookies übergeben. Wie kriege ich denn das jetzt
>> hin?
>
> Mit der magischen Konstanten SID, die Du in die obige Zeile einfügen musst:
>
> echo "<form action='admin.php?", SID, "&code=1&session=";
>
> Diese Variante funktioniert sowohl mit als auch ohne Cookies.
>
> Gruß. Claus

Ich danke Dir nochmal. Soweit war ich auch schon mal, hab dann aber
wahrscheinlich was mit den " und ' vertan, so dass die Konstante nur als
String ankam.
Jetzt klappt es wieder, nochmals Danke.

Gruß

Mathias
letters [ Fr, 09 November 2007 16:43 ] [ ID #1866966 ]
PHP » de.comp.lang.php.misc » session_id()

Vorheriges Thema: Verzeichniss auslesen, nur bestimmte Dateien anzeigen
Nächstes Thema: Was passiert eigentlic bei mail('FalscherName@web.de', 'Hallo Welt',$nachricht) ?