2009-08-24 16 views
0

Ich mache eine einfache dynamische Website mit PHP, wo ich den Benutzer anmelden und dann auf bestimmte Seiten zugreifen. Also hier ist was ich bisher gemacht habe.bietet Login-Check, Seite Redirect auf allen Seiten in PHP

Die eingeloggten Werte werden durch $ _POST-Variablen in einem PHP-Skript übernommen, wo sie Werte aus der Datenbank für registrierte Benutzer abruft. Wenn der Benutzer gefunden wird, i wie folgt vor:

session_register('userid'); 
$_SESSION['userid'] = $username;//this is taken from $_POST 
$_SESSION['accesslevel'] = $access; 

am Anfang des PHP-Skript ich jetzt gesetzt haben session_start();

hier kommt mein Problem.

Auf jeder Seite muss ich nun überprüfen, ob der Benutzer diese Seite sehen darf oder nicht, wenn er das nicht tut muss er auf login.php umgeleitet werden, wenn er dann die Seitenladung fortsetzen muss. Jetzt

so weit, was ich gelernt habe, ist, dass nur so Werte für PHP-Seiten zu halten ist $_SESSION Variablen zu verwenden, und die je Seite i Session-Variablen verwende muss i session_start() auf jeder Seite als die erste Zeile schreiben, sonst i wird bekommen Header bereits gesendet Fehler ..

Seltsamerweise habe ich genau das getan, aber immer noch Fehler mit den "Header bereits gesendet".

SO Ich will, was ist der beste Weg, um eine Website zu entwerfen, wobei i Session-Variablen in den meisten der Seiten, und halten diese gemeinsamen Kontrollen an einem gemeinsamen Ort verwenden müssen ..

  • Can i Verwenden Sie include() Feature einige wie?
  • Sind Sitzungen nur eine Möglichkeit, Daten über PHP-Seiten zu kommunizieren.
  • Was ist ein besserer Weg?

Ich habe den folgenden Code:.

<?php 
session_start(); 
if(!isset($_SESSION['user'])) 
{ 
    $_SESSION['loc'] = "adminhome.php"; 
    header("location:ettschoollogin.php"); 
    exit(); 
} 
    ?> 

die oben auf jeder Seite befindet, die überprüfen möchte, ob der Benutzer angemeldet hat

Und das ist teh Skript für die Anmeldung zu überprüfen

Ich war der allgemeine Fehler von zusätzlichen Leerzeichen nach "?>" Bewusst, ABER ICH NOCH NOCH ERHALTEN.

Danke Jungs, ich verpasste es und die "connection.php" -Datei hatte tatsächlich zusätzliche Leerzeichen nach "?>" Ich hatte es zuvor entfernt, aber einige, wie die Datei neu geschrieben wurde. Vielen Dank.

+0

Es ist nichts falsch. Bist du sicher, dass es nicht mit leeren Zeilen oben beginnt? Sie haben vorher noch nichts HTML gesendet? Wenn nicht, müssen Sie noch etwas anderes einbeziehen, das verhindert, dass dies funktioniert, daher ist der session_start nicht die erste Anweisung, die etwas ausgibt. Vielleicht einige Fehlermeldungen? – Palantir

Antwort

2

Ja, Sie können Include verwenden. Setzen Sie all Ihre gemeinsamen Funktionen in eine separate PHP-Datei und "fügen" Sie sie am Anfang jeder Datei ein.

Sie können Cookies zum Speichern von Informationen verwenden (normalerweise nur eine ID, mit der Sie zusätzliche Informationen auf der PHP-Seite nachschlagen). Normalerweise werden PHP-Sitzungen jedoch mit Cookies behandelt. Siehe setcookie in den Dokumenten.

Sie erhalten wahrscheinlich die Fehlermeldungen aufgrund von streunenden Zeichen außerhalb eines <?php ?> Blocks. Ein häufiger Fehler ist eine zusätzliche Leerzeile am Ende einer Include-Datei nach der ?>. Diese Leerzeile wird ausgegeben und Ihre Header werden gesendet. Wenn das nicht das Problem ist, müssen Sie nur sicherstellen, dass Sie den sitzungsbezogenen Code über irgendeinen Code bewegen, der eine Ausgabe erzeugen könnte (zB durch Verwendung von print oder echo). mit Ihrem Code

2

• Kann ich include() einige Funktionen verwenden?

Ja. Sie können vor dem Aufruf von session_start() alles machen, was Sie wollen, nur Sie dürfen nichts ausgegeben haben, nicht einmal ein einzelnes Leerzeichen oder Zeichen. Wahrscheinlich hast du schon etwas ausgegeben, vielleicht auf einen automatischen Einschluss oder Apache vorgreifen.

• Sind Sitzungen nur eine Möglichkeit, Daten über PHP-Seiten zu übertragen? • Was ist ein besserer Weg?

Weitere Möglichkeiten sind Cookies, Post und Get-Parameter. Aber Sitzungen sind die einzige Möglichkeit, Daten zwischen Seiten sicher zu übertragen, ohne sie an den Client und zurück zu senden (was zu Sicherheitsrisiken führen kann)

1

schreiben ob_start(); an der Spitze des Codes und dann müssen Sie nicht den Fehler erhalten „headers already senden“

Verwandte Themen