Forum
Tipps
News
Menu-Icon

session_id PHP

Hallo Leute,

ich habe wieder einmal eine Frage ;)
Ich hab folgende 2 PHP-Test-Scripts geschrieben:

Seite 1: sessid.php

<?php
    @session_start();
?>

<?php
   echo session_id();
   echo session_name();

      $_SESSION['id'] = session_id();
      echo $_SESSION['id'];
?>
<A href="test.session.php?<?=session_id()?>">weiter</A>

dieses Script macht auch alles was es soll, es setzt die session_id, es setzt $_session und zeigt alles richtig an.


Seite 2: test.session.php

<p>Diese Seite sollte die Session ID anzeigen die sie von der Vorseite bekommen
hat:</p>
<p>&nbsp;</p>

<?php
   echo $_SESSION['id'];
   
?>

Dieses Script zeigt zwar den in HTML def. Text an, aber der Rest bleibt leer, also $_session wird nicht angezeigt. Ich denke das ist wohl leer, was ich aber nicht verstehe, nachdem ich in der ersten Seite $_session einen Wert zugewiesen habe und der in der ersten Seite auch richtig angezeigt wird, und $_session sollte doch Seitenunabhängig sein!!??

Hat einer eine Idee was ich falsch mache? Klar hat das einer, aber würde er auch so nett sein mir das mit zu teilen? ;)

LG
Dieter


Antworten zu session_id PHP:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo |

Hat einer eine Idee was ich falsch mache?

Jupp. Und das ist eine ganze Menge.

Zuerst: Wenn du dich im Post auf deinen eigenen Quellcode beziehst, dann bitte Groß- und Kleinschreibung beachten, das tut sonst weh ;)

1. Fehler:
<A href="test.session.php?<?=session_id()?>">weiter</A>

Eine Parameterübergabe per GET funktioniert immer mit Paaren aus Bezeichner und Wert. Du übergibst nur einen Wert, den du dann mangels Bezeichner nicht ansprechen kannst (theoretisch schon, aber das ist eine andere Geschichte).

2. Fehler:
Du willst im 2. Skript die übergebene Session-ID ausgeben. Tatsächlich aber greifst du gar nicht auf das zu, was übergeben wird (wir hatten ja auch grad, dass das nicht geht), sondern auf das Array, in dem alle Session-Variablen stehen.

Nebenbei gesagt ist das auch richtig so, denn dafür hast du ja in PHP dieses einfache Session-Handling.

Daraus folgt dann...

3. Fehler:
mit session_start() wird eine Session nicht nur initialisiert, sondern auch wiederaufgenommen.

---

Im Klartext heißt das jetzt alles: Übergabe der Session-ID in der URL kannst du dir sparen. Im neuen Skript muss die Session mit session_start() erneut aufgenommen werden. Dann funktioniert es schonmal. Und dann kannst du dir das hier: $_SESSION['id'] = session_id(); auch sparen, denn die Session-ID ist ja mittels session_id() sowieso immer abrufbar.

Alle Klarheiten beseitigt? ;)

greez 8)
JoSsiF

Hallo Jossif,

danke, du hast mir richtig viel geholfen, ich hab da einfach zu kompliziert gedacht ;)
Ist ja direkt peinlich, aber ich dachte wenn ich auf das andere Script übergebe bin ich in einer neuen Session wenn ich das wieder starte  :-[

LG Dieter

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
;)

Deswegen IMMER in die Dokumentation schauen. Da steht (Zitat):

session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie, übermittelt wurde.

Wenn du Cookies nicht deaktiviert hast, geht das normalerweise darüber, und die Session wird mittels session_start() wieder aufgenommen.

greez 8)
JoSsiF

Hallo,
leider ist im gleichen Zusammenhang gleich wieder ein Problem aufgetreten.
Vorab gleich einmal die 3 Scripts:

Seite 1

<?php
    @session_start();
?>

<?php
   echo session_id();
   echo session_name();

   $_SESSION['id'] = "ich";
   echo $_SESSION['id'];   
?>
<A href="test.session.php">weiter</A>

Seite 2 test.session.php

<p>Diese Seite sollte die Session ID anzeigen die sie von der Vorseite bekommen
hat:</p>
<p>&nbsp;</p>

<?php
   @session_start();
?>
<?php
   echo session_id();
   echo $_SESSION['id'];
?>


<A href="zweiteseite.session.php">weiter</A>


Seite 3 zweiteseite.session.php

<?php
   @session_start();
   
   echo "Meine Session ID = ".session_id();
   echo ",  Inhalt der Session = ".$_SESSION['id'];
   
?>


So, auf Seite 1 und Seite 2 ist alles wie ich es haben möchte, nur dann auf Seite 3 eröffnet er eine neue Session. Da steht dan nnatürlich in der Url auch die session_id nicht mehr. Woran liegt das?  ???
Hier kann man das ganze ansehen:


LG
Dieter
Test

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Also wenn ich das teste, funktioniert's. Auch bei der 3. Seite ist die Session-ID dieselbe wie vorher.

ABER: Wie du in der Dokumentation sicher gelesen hast (;D), muss bei Cookie-basierten Sessions die Funktion session_start() aufgerufen werden, bevor etwas an den Browser geschickt wird. Genau das machst du aber in Skript Nr. 2 falsch. Und wenn du mal diese @-Zeichen vor deiner Funktion wegnehmen würdest, dann bekämst du auch die wohlverdiente Fehlermeldung ;)

greez 8)
JoSsiF 

Ja danke, jetzt geht es bei mir auch ;). Nur wunder ich mich trotzdem drüber warum er auf Seite 3 die id nicht in der Url anzeigt.
Aber trotzdem danke :)

LG
Dieter

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Nur wunder ich mich trotzdem drüber warum er auf Seite 3 die id nicht in der Url anzeigt.

Warum sollte er?  ??? ???

Weil es auf der 2ten Seite so ist  ::)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Der Webserver scheint die Session-ID an die URL automatisch anzuhängen, weil kein Cookie gesetzt werden kann - aus genannten Gründen. Im 3. Skript ist das ja nicht mehr der Fall.

Ja scheint wohl so zu sein, naja, ich bin froh dass es jetzt funktioniert :). Das war ja eine wichtige Sache für den Warenkorb :).

Also danke noch mal.

LG
Dieter


« HILFE BEI SmartFTPPiczo - Seite in eine Seite machen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
AppleScript
AppleScript ist eine Programmiersprache von Apple für Skripte und Programme auf Systemebene. Im Gegensatz zu den Unix-Shellscripts, die seit OS X ebenfalls mögl...

Javascript
JavaScript ist eine weit verbreitete Skriptsprache, die ursprünglich von Netscape für das DOM-Scripting für Webseiten entwickelt wurde. Sie hat sich seitde...

PostScript
PostScript ist eine Programmiersprache zur Beschreibung von grafischen Objekten und Schriftzeichen zur Übertragung vom Computer zum Drucker oder Laserbelichter. Gene...