aktuelle.kurse/m133/4_Modulinhalte_und_Uebungen/01-Grundlagen/03-PHP-einfach/einf_php_sessions.php.htm
Harald G. Mueller 28ff49e098 muh
2023-06-29 07:50:41 +02:00

340 lines
14 KiB
HTML
Raw Blame History

<html>
<head>
<title>PHP-Einfach.de - PHP Einf&uuml;hrung - Sessions</title>
<meta name="Author" content="Andavos">
<meta name="Publisher" content="Andavos">
<meta name="Copyright" content="Andavos">
<link rel="stylesheet" href="css/main.css" tppabs="http://www.php-einfach.de/offline/css/main.css" type="text/css">
</head>
<body text="#000000" bgcolor="#DDDDDD" link="#004A95" alink="#004A95" vlink="#525252">
<table align="center" height="100%" width="100%" cellspacing="0" border="0" cellpadding="0">
<tr>
<td align="center" valign="middle" height="100%" width="100%">
<table height="100" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" bgcolor="#FFE09F" width="750"><img src="grafiken/banner_top.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/banner_top.jpg" width="750" height="100" border="0" alt="">
<a name="oben"></a></td>
</tr>
</table>
<table height="650" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td class="black" height="100" width="150">
<br><b><center><img src="grafiken/side_navigation.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_navigation.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" class="blue" href="http://www.php-einfach.de/index.php"><b>&raquo;</b> Startseite</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_news.php"><b>&raquo;</b> News&uuml;bersicht</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_email.php"><b>&raquo;</b> Kontakt</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_impressum.php"><b>&raquo;</b> Impressum</a><br><br>
<center><img src="grafiken/side_community.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_community.gif" width="150" height="25" border="0" alt=""></center>
<a target="_blank" class="blue" target="_blank" href="http://forum.php-einfach.de/"><b>&raquo;</b> Forum</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_gaestebuch.php"><b>&raquo;</b> G&auml;stebuch</a><br><br>
<center><img src="grafiken/side_tutorials.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_tutorials.gif" width="150" height="25" border="0" alt=""></center>
<a class="blue" href="einf_php.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php.php"><b>&raquo;</b> Einf&uuml;hrung PHP</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_anfang.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_anfang.php"><b>&raquo;</b> Anfang</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_erste_schritte.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_erste_schritte.php"><b>&raquo;</b> Erste Schritte</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_variablen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_variablen.php"><b>&raquo;</b> Variablen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_if-anweisung.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_if-anweisung.php"><b>&raquo;</b> if-Anweisung</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_logische_operatoren.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_logische_operatoren.php"><b>&raquo;</b> Log. Operatoren</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_uebung1.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_uebung1.php"><b>&raquo;</b> &Uuml;bung</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_dateien.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_dateien.php"><b>&raquo;</b> Dateien</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_schleifen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_schleifen.php"><b>&raquo;</b> Schleifen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_array.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_array.php"><b>&raquo;</b> Array</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_dateien2.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_dateien2.php"><b>&raquo;</b> Dateien Teil 2</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_datum.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_datum.php"><b>&raquo;</b> Datum & Zeit</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_email.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_email.php"><b>&raquo;</b> Mail Funktion</a><br>
<div style="position: relative; left:15;" >
<a class="blue"href="einf_php_suchen_ersetzen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_suchen_ersetzen.php"><b>&raquo;</b> Suchen & Ersetzen</a><br>
<a class="blue" href="einf_php_nuetz_funktionen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_nuetz_funktionen.php"><b>&raquo;</b> N&uuml;tzliche Funktionen</a><br>
</div>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_php_sessions.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_sessions.php"><b>&raquo;</b> Sessions</a><br><br>
<a class="blue" href="einf_mysql.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql.php"><b>&raquo;</b> Einf&uuml;hrung MySQL</a><br>
<br>
<center>
<a target="_blank" href="http://www.php-einfach.de/nav_verlinkung.php"><img src="grafiken/php-einfach.gif" tppabs="http://www.php-einfach.de/offline/grafiken/php-einfach.gif" width="88" height="31" border="0" alt="PHP-Einfach.de"></a><br><br>
<a target="_blank" href="http://www.digicount.de/"><b>Counterdienst:</b></a>
<a target="_blank" href="http://www.php-einfach.de/nav_digicount.php"><div>
<img src="grafiken/digicount_livedemo.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/digicount_livedemo.jpg" border="0" alt="Digicount.de"><br>
<small>Unser werbefreier Counter- und Statistikdienst</small></div>
</a>
</center>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFFFFF" width="430">
<table width="430" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="10"></td>
<td valign="top" class="black" height="100" width="410">
<br>
<h4>Sessions</h4>
Mit Sessions hat man die M&ouml;glichkeit, bestimmte Daten w&auml;hrend einer Folge von Aufrufen eurer Website festzuhalten.<br>
Dem Besucher wird eine einzigartige <b>Session-ID</b> zugeordnet. Somit kann PHP den Besucher genau Identifizieren. Diese ID wird entweder als Cookie gespeichert oder mit an die URL geh&auml;ngt.<br><br>
Mit Sessions k&ouml;nnt ihr jetzt theoretisch unendlich viele Variablen, ink. Werte, f&uuml;r einen Besucher speichern, z.B. seinen Username, was er ganz am Anfang in ein Formular eingegeben hat und vieles mehr.<br>
Diese Werte k&ouml;nnt ihr sp&auml;ter ausgeben und damit auch arbeiten, z.B. &uuml;berpr&uuml;fen lassen.<br> <br>
<b>Sicherheit und Anwendungsbereich</b>
Session bieten zwar keine 100%tige Sicherheit, dennoch sind sie relativ sicher.<br>
Eine entf&uuml;hrte (geklaute) Session-ID erm&ouml;glicht dem Dieb, auf alle Daten zuzugreifen, die mit dieser Session-ID verbunden sind. <br><br>
Man benutzt bei sehr vielen Scripts Sessions, z.B. Loginsysteme (Foren & Portale), Warenk&ouml;rbe etc., deswegen lohnt es sich immer, diese Funktion zu erlernen.<br><br>
<b>Wie bekommt der Angreifer denn die Sesion ID herraus?</b> <br>
Das passiert vor allem, wenn die andere Person eine URL mit der Session ID an eine weitere Person weitergibt. Dies kann aber auch passieren, wenn die Session IDs in den Logfiles auftauchen. <br><br>
<b>Session ID durch Zufall erraten</b> <br>
Nat&uuml;rlich kann der Dieb auch eine Session ID erraten, allerdings ist dies sehr unwahrscheinlich. <br><br>
<a target="_blank" href="einf_php_session_erraten.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php_session_erraten.php">Wahrscheinlichkeitsrechnung anschauen</a> <br><br>
<br>
<b>Erste Schritte</b> <br>
Ganz oben auf der Site, <b>bevor</b> wir irgend etwas Ausgeben, egal ob mit PHP oder mit HTML, muss folgendes stehen:
<font color="#606060">
<pre>
&lt;?php
session_start();
?>
</pre>
</font>
Mit <b>session_start();</b> sagen wir dem PHP Script, dass diese Seite mit Session arbeitet.<br>
Dieser Code <b>muss immer</b> ganz oben stehen, wenn ihr mit irgendwelchen Session Befehlen arbeitet.<br>
<br>
Hier sind zwei m&ouml;gliche Fehlerquellen:<br><br>
<b>1.</b> <i>Cannot send session cookie - headers already sent by</i>
Wenn diese Fehlermeldung erscheint, dann ist irgendwo vor dem kleinen Script eine Ausgabe. Eine leere Zeile (Zeilenumbruch) oder ein Space reicht schon aus.<br><br>
<b>2.</b> <i>Warning: session_start() [function.session-start]: open(...) failed: No such file or directory</i><br>
Wenn diese Warnung erscheint, dann ist der angegebene Pfad zur Speicherung der Session Datei nicht verf&uuml;gbar.<br><br>
Als n&auml;chstes schauen wir, wie wir eine Session-Variable registieren:
<font color="#606060">
<pre>
&lt;?php
$_SESSION['name'] = "wert";
?>
</pre>
</font>
Falls du eine &auml;ltere PHP Version als <b>4.1.0</b> benutzen, musst du <b>$HTTP_SESSION_VARS['name']</b> benutzen.<br><br>
Um den obigen Wert auszugeben, speichern wir vorher die Session-Variable in einer Variable
<font color="#606060">
<pre>
&lt;?php
$name = $_SESSION['name'];
echo $name;
?>
</pre>
</font>
Wenn wir keine extra Variablen benutzen m&ouml;chten, so k&ouml;nnen wir den Session Befehl nicht direkt in die Zeichkette schreiben.<br><br>
So geht es aber:
<font color="#606060">
<pre>
&lt;?php
echo "Hallo ".$_SESSION['name']." Mueller";
?>
</pre>
</font>
Dies scheint zwar nicht viel zu sein, allerdings k&ouml;nnen wir eine Session-Variable genauso behandeln, wie eine normale Variable, nur m&uuml;ssen wir manchmal auf die Anf&uuml;hrrungzeichen achten..<br><br>
Um eine Session zu registieren, benutzt man normalerweise folgenden Script:
<font color="#606060">
<pre>
&lt;?php
if (!isset($_SESSION['name']))
{
$_SESSION['name'] = "Klaus";
}
?>
</pre>
</font>
Hier wird zuerst &uuml;berpr&uuml;ft ob, es die Session-Varibale schon gibt. Falls es sie nicht gibt, wird sie registriert.<br><br>
W&uuml;rde wir anstatt <b>!isset</b> <b>isset</b> schreiben, k&ouml;nnten wir &uuml;berpr&uuml;fen, ob die Session registriert wurde, oder nicht. Dies benutzt man bei Logins.<br><br>
Um alle Session-Daten der Sitzung zu l&ouml;schen, benutzt man <b>session_destroy()</b>
<font color="#606060">
<pre>
&lt;?php
session_destroy();
?>
</pre>
</font>
Dieser Befehl l&ouml;scht <b>alle</b> Daten der Session. <br>
Dieser Befehl kann nur auf Seiten eingesetzt werden, die mit <b>session_start()</b> beginnen. Dies ist bei allen Session-Befehlen der Fall.<br><br>
Um eine einzelne Session zu deaktivieren, ben&ouml;tigt man <b>unset</b>
<font color="#606060">
<pre>
&lt;?php
unset($_SESSION['name']);
?>
</pre>
</font>
Dieser Befehl l&ouml;scht die Werte f&uuml;r die Session-Variable <i>name</i>. <br><br>
<h3>Beispiel</h3>
Damit das etwas verst&auml;ndlicher wird, ist hier ein kleines Beispiel.
Dabei gibt man zuerst einen Wert in ein Formular ein: <br>
formular.html:
<font color="#606060">
<pre>&lt;form action="seite1.php" method="post">
Dein Name: &lt;br>
&lt;input type="Text" name="name">
&lt;input type="Submit">
&lt;/form>
</pre>
</font>
seite1.php
<font color="#606060">
<pre>&lt;?php
session_start(); //Ganz wichtig
$name = $_POST['name'];
if(!isset($name))
{
$name = "Gast";
}
//Session registieren
$_SESSION['username'] = $name;
//Text ausgeben
echo "Hallo $name &lt;br>
&lt;a href=seite2.php>Weiter&lt;/a>";
?></pre>
</font>
seite2.php
<font color="#606060">
<pre>&lt;?php
session_start(); //Ganz wichtig
//In $name den Wert der Session speichern
$name = $_SESSION['username'];
//Text ausgeben
echo "Du hei<65>t immer noch: $name";
?></pre>
</font>
Dies ist ein ganz simples Beispiel, zeigt aber gleich die St&auml;rke von Sessions.<br>
Bei dem Formular geben wir unseren Namen an, diese Daten werden dann an seite1.php gesendet. Dort werden sie abgefragt, und der <i>name</i> aus dem Formular wird in der Session <b>username</b> gespeichert.<br>
Wenn wir dann auf den Link klicken, und auf seite2.php gelangen, so k&ouml;nnen wir dort weiter den Namen des Besuchers (der Names aus dem Formular) ausgeben.<br>
Dies k&ouml;nnte man &uuml;ber beliebig viele Seiten weiterf&uuml;hren, mit unbegrentzt vielen Session-Variablen.<br><br>
Es gibt noch weitere, weitaus sinnvollere Beispiele, z.B. <a href="http://www.php-einfach.de/tuts_php_login_sessions.php">Login Sessions</a> bzw. <a href="http://www.php-einfach.de/tuts_php_login_sessions_dateien.php">Login mit Sessions und Dateien</a>.<br><br>
Gut jetzt haben wir die wichtigsten PHP-Befehle kennen gelernt, jetzt wird es Zeit, etwas mit <a href="einf_mysql_anfang.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_anfang.php">MySQL</a> zu arbeiten. Damit kann man viele Sachen viel leichter realisieren.<br><br>
<a href="http://www.php-einfach.de/nav_impressum.php">Autor Andavos</a>
<div align="center"><a href="#oben">Nach oben</a></div>
</td>
<td height="100" width="10"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td valign="top" class="black2" height="100" width="150">
<br><b><center><img src="grafiken/side_news.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_news.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://www.php-einfach.de/nav_news.php">News</a>
<br><br>
<b><center><img src="grafiken/side_forum.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_forum.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://forum.php-einfach.de/">Forum</a>
<br><br>
<b><center><img src="grafiken/side_newsletter.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_newsletter.gif" width="150" height="25" border="0" alt="Newsletter"></center></b>
<form target="_blank" method="post" action="http://www.php-einfach.de/clanletter/save.php">
<br> <br>
<div align="center">&copy; PHP-Einfach.de 2003 - 2007 </div>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>