PHP header(Location: ...): la Force de changement d'URL dans la barre d'adresse
Je suis actuellement en train de travailler sur un site mobile avec l'authentification à l'aide de sessions PHP avec une base de données.
J'ai une page de login avec un formulaire qui va à server_login.php sur "soumettre". Le fichier php puis crée certaines données de session (stocker dans $_SESSION), et redirige l'utilisateur vers la page d'index:
header("location:../../index.php");
La nouvelle page web (index.php) se charge correctement; toutefois, lorsque l'en-tête redirige la page, l'URL dans la barre d'adresse n'est pas modifié; il reste à *http://localhost/php/server/server_login.php* au lieu de http://localhost/index.php et ainsi, tous mes autres ressources qui rend l'utilisation de relative cheminement n'a pas pu être chargé. C'est comme si la page web continue à penser qu'il réside à l' /php/serveur à la place de /.
Étrangement, mon autre utilisation de header("location: ...") à logout.php les œuvres et les redirige la page avec succès avec un changement d'URL.
Je me suis assuré qu'il n'y a pas de sorties dans mon *server_login.php* avant le header de redirection (ci-dessus sont tout simplement mysql appels à vérifier) et je l'ai utilisé ob_start() et ob_end_flush() aussi.
Existe-il des méthodes de forcer l'URL dans la barre d'adresse pour changer (et donc, espérons-le, résoudre le problème de chemin relatif)? Ou suis-je en train de faire quelque chose de mal?
P/S: je suis à l'aide de jQuery Mobile.
EDIT: Voici mon code pour la redirection de ne pas modifier l'URL:
//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");
}
- pouvez-vous montrer le code de la façon dont vous affichez les données?
Vous devez vous connecter pour publier un commentaire.
Essayez de changer:
À
Bien, si le serveur envoie une redirection correct d'en-tête, le navigateur redirige et, par conséquent, "les modifications de l'adresse url". Il pourrait être un problème de navigateur, puis.
Je ne sais pas s'il a quelque chose à voir avec cela, mais vous ne devriez pas envoyer une url relative à la localisation du header ("HTTP/1.1 nécessite un URI absolu comme argument pour » Location: y compris le schéma, le nom d'hôte et le chemin d'accès absolu, mais certains clients acceptent d'Uri relatifs. ", http://php.net/manual/en/function.header.php), et "emplacement" doit être en majuscule, comme:
Dans votre élément de formulaire ajouter
data-ajax="false"
. J'ai eu le même problème à l'aide de jquery mobile.data-ajax=false
a fonctionné dans mon cas.Ne pas utiliser tout l'espace blanc. J'ai eu le même problème. Puis j'ai enlevé l'espace blanc comme:
Puis il a travaillé.
J'ai eu le même problème avec l'affichage d'un formulaire. Ce que j'ai fait était que de désactiver le data-ajax.
vous voudrez peut-être mettre une pause; après votre emplacement:
Êtes-vous sûr de la page vous rediriger trop n'ont pas de redirection dans que, si aucune session data n'est trouvé? Que pourrait être votre problème
Aussi oui toujours ajouter des espaces comme @Peter O'suggéré.
//Inscrire le nom de l'utilisateur et l'ID de
changement de
//Inscrire le nom de l'utilisateur et l'ID de
Comme "cfphpflex", a suggéré, vous pouvez ajouter
break;
après la définition de l'en-tête. Vous pouvez également l'écho de quelque chose, commeecho 'test';
.J'ai une solution pour vous, Pourquoi ne pas vous plutôt l'utilisation d'Exploser si votre url est quelque chose comme
Url-> website.com/test/blog.php
Il suffit de changer la maison à votre goût
Vous êtes supposé utiliser comme
header(Location:../index.php)
si dans un autre dossierutilisation
header("location: index.php"); //ce travail dans mon site
lire plus sur l'en-tête() à la documentation de php.
pourquoi toute cette url?
vous pouvez simplement utiliser
si les fichiers php sont dans le même dossier et c'est mieux parce que si vous voulez héberger les fichiers
ou modifier le port, vous n'aurez aucun problème pour arriver à cette URL.
index.php
n'est pas dans le même dossier.