Heyho!
Ich hab vor Kurzem versucht, aus einem Ajax-OnePage-Skript etwas ähnliches mit Login zu basteln, was allerdings nicht ganz geklappt hat
Die Überlegung:
- Die index.php prüft, ob die Session steht. Wenn ja, wird alles angezeigt und korrekt eingebunden, wenn nein, wird alles ausgeblendet und evtl. Direkt-URLs zur index.page.php zurückgeleitet.
- Bei Eingabe vom korrekten Nutzernamen und Passwort wird die Session erstellt
- Der Rest erklärt sich, denke ich, wenn man den Code durchliest.
Das Problem:
- Nach Eingabe der korrekten Daten in der index.page.php erscheint alles richtig und wird erweitert. Klicke ich nun aber auf den Link zur test.page.php loggt sich die Seite aus, lässt alles verschwinden und zeigt den Login. Soweit ja gut, aber die Session wurde erstellt und noch nicht zerstört! Also sollte eigl. die test.page.php eingebunden und angezeigt werden!
Der Code:
Die .htaccess leitet die URLs erstmal über die index.php
<IfModule mod_rewrite.c>
# Enable URL rewriting
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Main URL rewriting.
RewriteRule .* index.php [L]
</IfModule>
Alles anzeigen
Die index.php, die den Login regeln soll
<?php
session_start();
$titles = array(
'index' => 'Startseite',
'calendar' => 'Kalender bearbeiten',
'forum' => 'Mitgliederforum'
);
@$user = $_POST["user"];
@$pass = $_POST["pass"];
@$session = $_SESSION["angemeldet"];
if($user == "XXX" && $pass == "XYZ"){
$session = true;
}
$urlParts = array();
preg_match('/\/([a-z]+)\.php(\?.*)?$/', $_SERVER["REQUEST_URI"], $urlParts);
if(isset($session) || $session){
if(isset($urlParts[1]) && isset($titles[$urlParts[1]])) {
$page = $urlParts[1];
} else {
$page = 'index';
}
} else{
$page = 'index';
}
?>
<!DOCTYPE html>
<? xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
<head>
<title><?php echo $titles[$page]; ?> - Pfadfinder Weilheim</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="author" content="Manuel Schober" />
<meta name="publisher" content="www.df.eu" />
<meta name="copyright" content="Pfadfinder Weilheim" />
<meta name="description" content="Mitgliederbereich des BdP-Pfadfinderstammes Sir Francis Drake" />
<meta http-equiv="cache-control" content="no-cache" />
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="revisit-after" content="no" />
<meta name="generator" content="Webocton - Scriptly" />
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
/* <![CDATA[ */
var titles = <?php echo json_encode($titles); ?>;
/* ]> */
</script>
<script language="javascript" type="text/javascript" src="scripts/main.js"></script>
<script>
$(document).ready(function() {
$("nav li:has(ul)").find("ul").hide();
$("nav li:has(ul)").hover(function(){
$(this).find("ul").slideDown();
}, function(){
$(this).find("ul").hide();
});
});</script>
<link rel="stylesheet" href="style/main.css" type="text/css" />
<link rel="shortcut icon" href="../data/img/BdP-Lilie.ico" type="image/x-icon" />
</head>
<body>
<header>
Dauerhaft bleibender Header
</header>
<nav>
<ul>
<li><a href="index.php"><?php if(isset($session) || $session){echo "Logout";}else{echo "Login";} ?></a></li>
<?php
if(isset($session) || $session){
echo "<li><a href='calendar.php'>Kalender</a></li>
<li><a href='forum.php'>Forum</a></li>";
}
?>
<li><a href="test.php">Test</a></li>
</ul>
</nav>
<div id="swapper"><?php include('pages/' . $page . '.page.php'); ?></div>
<footer>
Dauerhaft bleibender Footer
</footer>
</body>
</html>
Alles anzeigen
Die index.page.php, welche $user und $pass liefert.
<?php
if(isset($session) || $session){
?>
<h1>Logout</h1>
<a href="scripts/logout.php">Ausloggen</a>
<?php
} else{
?>
<h1>Login</h1>
<form action="<?php $_SERVER["DOCUMENT_ROOT"]; ?>index.php" method="post">
Nutzername: <input type="text" name="user" /><br />
Passwort: <input type="password" name="pass" /><br />
<input type="submit" value="Login" /><br />
</form>
<?php
}
?>
Alles anzeigen
Die logout.php
<?php
session_start();
session_destroy();
$root = $_SERVER["DOCUMENT_ROOT"];
header("Location:". $root . "index.php");
?>
Eine test.page.php
<h1>Testseite</h1>
<p>Sollte nach Login angezeigt werden und nach Logout zur index.php zurückleiten.</p>
PS: Spoiler wären in Zukunft vielleicht ganz nützlich!
Fragen zu Details sind erlaubt, schnelle Hilfe erhofft. Warum bleibt die Session nicht bestehen???