it-swarm.com.de

PHP header (Location: ...): URL-Änderung in der Adressleiste erzwingen

Ich arbeite derzeit an einer mobilen Site mit Authentifizierung mithilfe von PHP Sitzungen mit einer Datenbank. Ich habe eine Anmeldeseite mit einem Formular, das auf server_login.php beim Senden geht Die PHP-Datei erstellt dann einige Sitzungsdaten (in $ _SESSION gespeichert) und leitet den Benutzer zurück zur Indexseite:

header("location:../../index.php");

Die neue Webseite (index.php) wird korrekt geladen. Wenn der Header die Seite jedoch umleitet, wird die URL in der Adressleiste nicht geändert. es bleibt bei * http: //localhost/php/server/server_login.php* anstelle von http: //localhost/index.php und damit allen Meine anderen Ressourcen, die relative Pfade verwenden, konnten nicht geladen werden. Es ist, als ob die Webseite immer noch denkt, dass sie sich unter/php/server statt unter/befindet.

Seltsamerweise funktioniert meine andere Verwendung des Headers ("location: ...") in logout.php und leitet die Seite bei einer URL-Änderung erfolgreich weiter.

Ich habe sichergestellt, dass in meiner * server_login.php * keine Ausgaben vorhanden sind, bevor die Header umgeleitet werden (darüber befinden sich nur zu überprüfende MySQL-Aufrufe), und ich habe auch ob_start () und ob_end_flush () verwendet.

Gibt es Methoden, um die URL in der Adressleiste zu zwingen, sich zu ändern (und so hoffentlich das relative Pfadproblem zu beheben)? Oder mache ich etwas falsch?

P/S: Ich verwende jQuery Mobile.

BEARBEITEN: Hier ist mein Code für die Umleitung, die die URL nicht ändert:

// some other stuff not shown


$sql = "SELECT * FROM $user_table WHERE email = '$myemail' AND password = '$mypassword'";
$login_result = mysql_query($sql, $connection);

$count = mysql_num_rows($login_result);

if ($count == 1) {

    // Successfully verified login information

    session_start();

    if (!isset($_SESSION['is_logged_in'])) {
        $_SESSION['is_logged_in'] = 1;
    }

    if (!isset($_SESSION['email'])) {
        $_SESSION['email'] = $myemail;
    }
    if (!isset($_SESSION['password'])) {
        $_SESSION['password'] = $mypassword;
    }

    // Register user's name and ID
    if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
        $row = mysql_fetch_assoc($login_result);
        $_SESSION['name'] = $row['name'];
        $_SESSION['user_id'] = $row['user_id'];
    }

    header("Location: http://localhost:8080/meet2eat/index.php");

} else {
    // Not logged in. Redirect back to login page
    header("Location: http://localhost:8080/meet2eat/php/login.php?err=1");

}
55
vemoxy

Versuchen Sie Folgendes zu ändern:

header("Location : blabla")
                ^
                |
           (whitespace)

Zu

header("Location: blabla")
64
BuraCULa

Wenn der Server einen korrekten Umleitungsheader sendet, leitet der Browser die URL um und ändert sie daher. Dann könnte es sich um ein Browserproblem handeln. Ich weiß nicht, ob es irgendetwas damit zu tun hat, aber Sie sollten keine relative URL im Location-Header senden ("HTTP/1.1 erfordert einen absoluten URI als Argument für" Location: einschließlich Schema, Hostname und absoluter Pfad, Einige Clients akzeptieren jedoch relative URIs. ", http://php.net/manual/en/function.header.php ), und" location "muss in Großbuchstaben geschrieben werden, z.

header('Location: http://myhost.com/mypage.php');
31
schneck

Fügen Sie in Ihrem Formularelement data-ajax="false". Ich hatte das gleiche Problem mit JQuery Mobile.

17
kackleyjm

Ich hatte das gleiche Problem beim Posten eines Formulars. Was ich getan habe, war das Ausschalten des Daten-Ajax.

6
Hadi

vielleicht möchten Sie eine Pause einlegen. Nach Ihrem Standort:

header("HTTP/1.1 301 Moved Permanently");
header('Location:  '.  $YourArrayName["YourURL"]  );
break;
5
cfphpflex

Verwenden Sie keine Leerzeichen. Ich hatte das gleiche Problem. Dann entfernte ich Leerzeichen wie:

header("location:index.php"); or header('location:index.php');

Dann hat es geklappt.

5
Hasib Omi

// Registrieren Sie den Namen und die ID des Benutzers

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
    $row = mysql_fetch_assoc($login_result);
    $_SESSION['name'] = $row['name'];
    $_SESSION['user_id'] = $row['user_id'];
}

header("Location: http://localhost:8080/meet2eat/index.php");

ändern

// Registrieren Sie den Namen und die ID des Benutzers

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
    $row = mysql_fetch_assoc($login_result);
    $_SESSION['name'] = $row['name'];
    $_SESSION['user_id'] = $row['user_id'];
header("Location: http://localhost:8080/meet2eat/index.php");
}
1
GULIM SHAH

Sind Sie sicher, dass die Seite, auf die Sie umleiten, keine Umleitung enthält, wenn keine Sitzungsdaten gefunden werden? Das könnte dein Problem sein

Auch ja immer Whitespace wie @Peter O vorgeschlagen.

1
Joe Barbour

Wie "cfphpflex" vorschlug, können Sie nach dem Setzen des Headers break; Hinzufügen. Sie können auch ein Echo ausgeben, z. B. echo 'test';.

1
shlgug

Ich habe eine Lösung für dich. Warum benutzt du nicht lieber Explode, wenn deine URL so ähnlich ist?

Url-> website.com/test/blog.php

$StringExplo=explode("/",$_SERVER['REQUEST_URI']);
$HeadTo=$StringExplo[0]."/Index.php";
Header("Location: ".$HeadTo);
0
Jomar Delfin

Wechseln Sie einfach nach Ihren Wünschen

$home_url = 'http://' . $_SERVER['HTTP_Host'] . dirname($_SERVER['PHP_SELF']) . '/home';

header('Location: ' . $home_url);
0
aary trivedi