Je travaille actuellement sur un site mobile avec une authentification utilisant PHP sessions avec une base de données. J'ai une page de connexion avec un formulaire qui va à server_login.php sur submit. Le fichier php crée ensuite des données de session (stockées dans $ _SESSION), et redirige l'utilisateur vers la page d'index:
header("location:../../index.php");
La nouvelle page Web (index.php) est chargée correctement. Toutefois, lorsque l'en-tête redirige la page, l'URL dans la barre d'adresse n'est pas modifiée. il reste à * http: //localhost/php/server/server_login.php* au lieu de http: //localhost/index.php et ainsi de suite mes autres ressources utilisant le chemin relatif ne peuvent pas être chargées. C'est comme si la page Web pensait toujours qu'elle résidait dans/php/server au lieu de /.
Étrangement, mon autre utilisation d'en-tête ("location: ...") sur logout.php fonctionne et redirige la page avec succès avec un changement d'URL.
Je me suis assuré qu'il n'y avait pas de sorties dans mon * server_login.php * avant la redirection de l'en-tête (au-dessus, ce ne sont que des appels mysql à vérifier) et j'ai aussi utilisé ob_start () et ob_end_flush ().
Existe-t-il des méthodes pour forcer l'URL de la barre d'adresse à changer (et donc, espérons-le, à résoudre le problème du chemin relatif)? Ou est-ce que je fais quelque chose de mal?
P/S: J'utilise jQuery Mobile.
EDIT: Voici mon code pour la redirection qui ne change pas 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");
}
Essayez de changer:
header("Location : blabla")
^
|
(whitespace)
À
header("Location: blabla")
Eh bien, si le serveur envoie un en-tête de redirection correct, le navigateur redirige et donc "modifie l'URL". Ce pourrait être un problème de navigateur, alors. Je ne sais pas si cela a quelque chose à voir avec cela, mais vous ne devriez pas envoyer d'URL relative dans l'en-tête d'emplacement ("HTTP/1.1 requiert un URI absolu comme argument pour" Emplacement: comprenant le schéma, le nom d'hôte et le chemin absolu, mais certains clients acceptent les URI relatifs. ", http://php.net/manual/en/function.header.php ), et" emplacement "doit être mis en majuscule, comme suit:
header('Location: http://myhost.com/mypage.php');
Dans votre élément de formulaire, ajoutez data-ajax="false"
. J'ai eu le même problème en utilisant jquery mobile.
J'ai eu le même problème avec l'envoi d'un formulaire. Ce que j'ai fait, c'est éteindre le data-ajax.
vous voudrez peut-être mettre une pause; après votre emplacement:
header("HTTP/1.1 301 Moved Permanently");
header('Location: '. $YourArrayName["YourURL"] );
break;
N'utilisez aucun espace blanc. J'ai eu le même problème. Puis j'ai supprimé les espaces blancs comme:
header("location:index.php"); or header('location:index.php');
Ensuite cela a fonctionné.
// Enregistrer le nom et l'identifiant de l'utilisateur
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");
changer à
// Enregistrer le nom et l'identifiant de l'utilisateur
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");
}
Êtes-vous sûr que la page que vous redirigez n'a pas de redirection si aucune donnée de session n'est trouvée? Ça pourrait être ton problème
Aussi, oui, ajoutez toujours des espaces, comme suggéré par @Peter O.
Comme "cfphpflex" l'a suggéré, vous pouvez ajouter break;
après avoir défini l'en-tête. Vous pouvez également faire écho à quelque chose, tel que echo 'test';
.
J'ai une solution pour vous, pourquoi ne pas utiliser plutôt Explode si votre URL est quelque chose comme
Url-> website.com/test/blog.php
$StringExplo=explode("/",$_SERVER['REQUEST_URI']);
$HeadTo=$StringExplo[0]."/Index.php";
Header("Location: ".$HeadTo);
Il suffit de changer de maison à votre goût
$home_url = 'http://' . $_SERVER['HTTP_Host'] . dirname($_SERVER['PHP_SELF']) . '/home';
header('Location: ' . $home_url);