Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

20.04.2013, 17:41

PHP Session geht bei Seitenwechsel verloren

Hallo Community,

ich speicher Login-Daten mit meinem PHP Script so:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

session_start();

if(!empty($_POST["Benutzer"]) )

   {

       $_SESSION["Benutzer"] = $_POST["Benutzer"];

   }

?>


Und zeige diesen so:

Quellcode

1
2
3
                    $Benutzername = $_SESSION["Benutzer"];

                    echo "Welcome back, $Benutzername !";


Das funktioniert auch alles gut, auch beim neu laden der Seite, allerdings beim Wechsel auf eine neue Seite geht der Inhalt des Arrays irgendwie verloren.
Auch wenn ich dem Link

Quellcode

1
?PHPSESSID=<?php echo session_id(); ?>';
anhänge.

Ich kann aber in Chrome auch nicht erkennen, dass meine Seite ein Cookie gesetzt hätte. Woran könnte es liegen?

Gruß,
MitgliedXYZ

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

2

20.04.2013, 19:09

Hey,

auf jeder Seite, die sessions verwendet, musst du

Quellcode

1
session_start();
verwenden! Das muss das ERSTE sein, was kommt.
WIP Website: kevinheese.de

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

21.04.2013, 00:27

Noch ein Tipp, damit du dies nicht vergessen kannst ist es sinnvoll eine Hauptdatei zu haben in die du dann, z.B. mit Hilfe einer GET Variable, einfach deinen Code für die Seite inkludierst.

Also in dieser Art:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// index.php

<?php
session_start();

$page = $_GET["page"];

if(file_exists("pages/".$page.".php")){

include("pages/".$page.".php");

}
?>

// pages/test.php

<?php
// do something
?>

// Aufruf:

domain.de?page=test

benjs

Frischling

Beiträge: 19

Beruf: Schüler

  • Private Nachricht senden

4

21.04.2013, 08:27

@MitgliedXYZ
Du musst aber vorsichtig sein, was wäre wenn mein Benutzername "<script type="text/javascript">alert("=P");</script> ist? Schau dir mal diesen Wikipedia-Artikel an. Das kann man zum Glück mit htmlspecialchars() verhindern :)

@DerKugelschieber
Auch wenn das Pseudo-Code ist, sollte man darauf achten, sich nicht darauf zu verlassen, dass $_GET['page'] richtig ist ... siehe Directory Traversal attack. Auch mit der PHP-Endung könnte man Quatsch anstellen ... je nachdem wie gescriptet wurde.

Sorry fürs rummeckern aber das musste mal gesagt werden :)

MfG

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

5

21.04.2013, 10:12

Eigentlich genau richtig so, in der Praxis sieht man immer wieder, dass sich selbst die großen Seiten an diesen Stellen nicht ordentlich absichern :).
WIP Website: kevinheese.de

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

6

21.04.2013, 10:57

@benjs
Stimmt, aber mir würde es erst mal wichtig sein, dass das Script annähernd funktioniert, bis ich mich um Sicherheitsfragen kümmere...
Außerdem würde doch schon reichen, wenn ich alle Benutzereingaben auf das vorhanden sein von "<script" und "<php" überprüfe, falls diese Begriffe enthalten sind, nehme ich die Eingaben eben nicht an.


Ok, danke für die Hilfe, dass Problem ist jetzt gelöst.

Alle Seiten sind mit folgendem Code begonnen

Quellcode

1
2
3
4
<?php
//starten
session_start();
?>   

Das hat komischer Weise nicht funktioniert, obwohl ich dachte das Kommentare ignoriert werden...
So funktioniert es:

Quellcode

1
2
3
<?php
session_start();
?>   

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (21.04.2013, 11:08)


KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

7

21.04.2013, 11:06

Poste doch mal bitte das komplette Script. In der Regel wird ein Cookie erstellt, wenn du die Sessions nicht gerade per URL übergibst.
WIP Website: kevinheese.de

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

8

21.04.2013, 11:09

Poste doch mal bitte das komplette Script. In der Regel wird ein Cookie erstellt, wenn du die Sessions nicht gerade per URL übergibst.

Du warst zu schnell, Problem hat sich schon gelöst, danke aber für die Hilfe. Das Kommentar im Code (siehe oben) war die Fehlerursache...

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

9

21.04.2013, 11:11

Das muss das ERSTE sein, was kommt.


:thumbsup:

Das ist mir schon so oft passiert, und jedes mal könnte ich ... 'nen Schluck Wasser trinken!
WIP Website: kevinheese.de

benjs

Frischling

Beiträge: 19

Beruf: Schüler

  • Private Nachricht senden

10

21.04.2013, 12:14

Außerdem würde doch schon reichen, wenn ich alle Benutzereingaben auf das vorhanden sein von "<script" und "<php" überprüfe, falls diese Begriffe enthalten sind, nehme ich die Eingaben eben nicht an.


Naja das musst du wissen. Eine gute Lösung wäre das definitiv nicht, denn wenn ich mich <span style=" font-weight: bold; font-size: 100px;text-decoration: blink;">Benutzername</span> nennen würde, hätte ich einen fetten, blinkenden Schriftzug als Benutzername :)
Dagegen schafft htmlspecialchars() Abhilfe, denn aus jedem < wird ein &lt; und aus jedem > wird ein &gt; - dann ist es ganz egal wie ich mich nenne und der Name wird auch immer gleich angezeigt.

PHP-Quelltext

1
$Benutzername htmlspecialchars($_SESSION["Benutzer"]);


Just sayin :)

MfG, Ben

Werbeanzeige