Hallo zusammen,
ich versuche gerade, den Login mittels sessions in PHP (Link) nachzubauen.
Alles klappt wunderbar, solange Cookies im Browser (Firefox 3) aktiviert sind. Wenn ich sie deaktiviere, funktioniert der Login nicht mehr, da die $_SESSION offensichtlich nicht übergeben wird. Nach dem Login wird man nicht eingeloggt ausgewiesen.
Laut den Informationen vom PHP Manual (Link) verstehe ich das so, dass ich nicht noch etwas ändern muss, wenn die Cookies beim client nicht funktionieren. Meine PHP Version ist 5.2.6.
Die Optionen session.use_trans_id = 1 und session.use_only_cookies = off sollten das meiner Meinung nach erlauben - siehe Auszug von phpinfo():
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly On On
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 1000
session.gc_maxlifetime 10 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /var/lib/php5
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off On
session.use_trans_sid 1 0
Hier noch der relevante Code zum Login und Identifizieren:
login.php:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
session_start();
$username = $_POST['username'];
$passwort = $_POST['passwort'];
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);
// Benutzername und Passwort werden überprüft
if ($username == 'benjamin' && $passwort == 'geheim') {
$_SESSION['angemeldet'] = true;
// Weiterleitung zur geschützten Startseite
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
if (php_sapi_name() == 'cgi') {
header('Status: 303 See Other');
}
else {
header('HTTP/1.1 303 See Other');
}
}
header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
exit;
}
}
[...]
auth.php:
<?php
session_start();
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);
if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
exit;
}
?>
Hat jemand von euch eine Idee, warum die session id ohne Cookies nicht weitergegeben wird? Geht das, ohne die SID überall einbauen zu müssen? Ich bin für jede Hilfe dankbar.
Beste Grüße
David