Sessions? Wozu die Sessionid?

dobi1989

Mitglied
Hallo,
ich plane einen neuen Newssystem-Service. Das ist ja eigentlich garkein Problem. Aber da kommt das große ABER:
Ich möchte für den Login keine Cookies benutzen, sondern Sessions!

So. Nehmen wir mal an der User gibt seine Daten in der "login.php" ein und die Daten werden dann in der "logincheck.php" überprüft, auf Richtigkeit und so weiter. (Das ist noch kein Problem). So wenn die Daten vorhanden und richtig sind wird nun eine Session erstellt. Ich mache das so:

<?php
session_start();
$sid = session_id;
$_SESSION['username'] = "Demo";
$_SESSION['email'] = "demo@test.de";
header("Location: login.php?show=1&sid=$sid");
?>

So. Nun übergebe ich die sessionid mit dem "header();". Im Loginbereich muss die Session ja mit jedem neuen Link auch weitergegeben werden, oder?

Wenn ich jetzt die login.php?show=2&sid=$sid"; aufrufe dann kann ich auf die Sessionvariablen zugreifen mit oder ohne $sid. Wieso? Wozu geben dann die Sessionid weiter wenn ich auch ohne sie auf die Session Variablen zugreifen kann?

Mit freundlichen Grüßen

Markus Dobmann
 
Nein, du brauchst die Session nur einmal setzen. Weitergegeben wird die automatisch!

Einfach per $_SESSION['foobar'] drauf zugreifen!
 
les in der referenz nochmal das mit den sessions nach.

In deinem Fall wird die sessionid automatisch weitergeleitet. Es gibt aber auch server,
bei denen dieses Feature (--enable-trans-sid) abgeschaltet ist. Für diese Fälle ist die Übergabe nahezu unumgänglich.

Desweiteren interessant könnte für dich die Konstante SID sein, die automatisch beim Sessionstart angelegt wird.

Sessions in der PHP-Faq: http://www.php-faq.de/ch/ch-version4_session.html
Session in der Referenz: http://de.php.net/manual/de/ref.session.php

Referenz über SID:
Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

SID (string)

Konstante, die entweder den Namen und die ID der Session in der Form "name=ID" enthält oder eine leere Zeichenkette, falls die Session-ID in einem entsprechenden Cookie gesetzt wurde.
 
@ Stibie: Das stimmt nur zur Hälfte, sie werden automatisch per Cookies weitergegeben. Aber das will er ja verhindern.
 
Zuletzt bearbeitet:
Also wenn ich das mit der Konstante "SID" mache und einen Link
anlege z.B. echo "<a href=\"index.php?show=login&loginshow=1&sid=" . SID . "\">";
dann zeigt er mir in der URL keinen Wert für "sid" an!

Mit freundlichen Grüßen
Markus Dobmann
 
dobi1989 hat gesagt.:
Also wenn ich das mit der Konstante "SID" mache und einen Link
anlege z.B. echo "<a href=\"index.php?show=login&loginshow=1&sid=" . SID . "\">";
dann zeigt er mir in der URL keinen Wert für "sid" an!

Mit freundlichen Grüßen
Markus Dobmann
SID beinhaltet: "PHPSESSID=dgsgiosdgföglib3pr389r3zr3uswetc",
also sessionname, = und die id.

Ausgabe erfolgt mit
PHP:
echo('<a href="index.php?show=login&loginshow=1&'.SID.'">');
Wenn bei diesem Link nichts angehängt wird, kann das 2 Ursachen haben:
Entweder wurde die Session nicht richtig initialisiert, so daß der Name und die ID der Session keinen Wert haben,
oder der Server "kappt" die SID ab, weil er ja eh weiterleitet. Hab ich auch schon öfters erlebt.

Testen kannst du es relativ einfach, du merkst ja, wenn Variablen aus der Session nachher verfügbar sind, oder nicht :D
 
Ich poste mal mein Script:

login.php
PHP:
		<table border="0" style="border-collapse: collapse" bordercolor="#000000" cellspacing="0" cellpadding="0" width="100%">
		<tr>
			<td align="middle"><b>Login</b><br><br>
			<?php
			if (!isset($_SESSION['username']))
			{
			?>
			<?php
			if ($_REQUEST['fehler'] == "1")
			{
				echo "Zugangsdaten ungültig<br /><br />";
			}
			?>
			<form action="logincheck.php" method="post">
			<table>
			<tr><td>Username: </td><td><input type="text" name="log_user" maxlength="20"></input></td></tr>
			<tr><td>Passwort: </td><td><input type="password" name="log_pw" maxlength="20"></input></td></tr>
			<tr><td>&nbsp;</td><td><input type="submit" name="login" value="Einloggen"></input></td></tr>
			</table>
			</form>
			<?php
			}
			else
			{
			echo "[ <a href=\"index.php?show=login&loginshow=1&sid=$sid\">&Uuml;bersicht</a> ]&nbsp;&nbsp;
				  [ <a href=\"index.php?show=login&loginshow=2&sid=$sid\">Webmaster Tools</a> ]&nbsp;&nbsp;
				  [ <a href=\"index.php?show=login&loginshow=3&sid=$sid\">User Mail</a> ]&nbsp;&nbsp;
				  [ <a href=\"index.php?show=login&loginshow=4&sid=$sid\">Personen Daten</a> ]<br /><br />";

			}
			?>
			</td>
		</tr>
		</table>

logincheck.php
PHP:
<?php
include("config/zugriff.inc.php");
mysql_select_db($db);
$log_user = $_POST['log_user'];
$log_pw = md5($_POST['log_pw']);
$sql = "SELECT * FROM news_login WHERE (username like '".$log_user."') AND (passwort like '".$log_pw."')";
$ergebnis = mysql_query($sql);
$result = mysql_num_rows($ergebnis);
if ($result > 0)
{
	$daten = mysql_fetch_array($ergebnis);

	session_start();
	$sid = session_id();
	$_SESSION['username'] = $daten['username'];
	$_SESSION['name'] = $daten['name'];
	$_SESSION['email'] = $daten['email'];
	$_SESSION['userid'] = $daten['userid'];
	$_SESSION['userip'] = $daten['userip'];

	mysql_close($verbindung);
	header("Location: index.php?show=login&loginshow=1&sid=$sid");
}
else
{
	mysql_close($verbindung);
	header("Location: index.php?show=login&fehler=1");
}
?>

logout.php
PHP:
<?php
session_start();
session_destroy();
header("Location: index.php");
?>
 
Bei Deinem Code bringt das Uebergeben der SessionID im URL absolut nichts!

Bei Sessions werden in der Regel Session-Cookies erstellt. Falls dies im Browser oder in PHP deaktiviert ist, musst Du, um mit Sessions arbeiten zu koennen, die SessionID im URL uebergeben.
Jedoch musst Du diesen uebergebenen Wert dann auch vor session_start() mittels session_id() wieder setzen.
Zum Beispiel so:
PHP:
if ($_GET["sessionid"])
 {
  $sid=$_GET["sessionid"];
  session_id($sid);
 }
session_start();
if (!isset($sid))
 {
  $sid=session_id();
 }
 
Zurück