Avoir s'être logué, retour sur la page précédente

120902
,

Bonjour,
je me permets de revenir vers vous car je cherche une personne qui pourrait m'aiguiller sur mes recherches.

j'ai une page article.php où en bas de page, je propose à l'internaute de se connecter pour commenter.
Je l'envoie vers un lien où il peut se loguer.
J'aimerais une fois logué qu'il revienne sur cette même page article

J'ai cherché des réponses et je trouve des info sur

header(href="javascript:history.back()");
ou
header('Location: ' . $_SERVER['HTTP_REFERER']);

mais les avis divergent et rien ne m'avance clairement.
On parle de session ou cookie

Mais je n'arrive pas à trouver un truc complet sur la démarche.
Pourriez-vous me dire vers quelle piste m'aventurer pour que j'arrive à trouver des réponses car là je stagne et je ne sais pas trop où aller

Je vous remercie par avance

13 Réponse

44227
,

Ce que tu as écrit fait parfaitement l'affaire, la redirection avec un header est la meilleur solution

header('Location: ' . $_SERVER['HTTP_REFERER']); // HTTP_REFERER contient la page précédente (elle est envoyé par le navigateur)
Default
,

vue que la dernière page est celle de log, ce code ne va pas marcher
à mon avis tu devrais utiliser la fonction header directement sur le lien de la page article de cette façon

header('Location:'. $url_de_ta_page_article);
120902
,

Merci pour vos 2 réponses .
Effectivement de ce que j'ai lu si on est en https le REFERER ne marchera pas
J'ai bien pensé faire une redirection du header avec le lien de mon article mais est-il possible d'avoir un truc général dans la page identification ? et que de cette page, peut-importe d'où on vient, on est directement envoyé sur la page précédente ?

Merci par avance

44227
,

Si tu veut être rediriger a la page précédent la page de connexion, tu devrais stocker l'url de cette page dans un input de type hidden, comme ceci par exemple

<input type="hidden" name="url_referer" value="<?php echo $_SERVER['HTTP_REFERER']; ?>">

et rediriger apres le traitement de ton formulaire comme ceci

header('Location:'. $_POST['url_referer']);
Default
,

Très bien pensé
en fait le principe général serait de stocker l'url de la dernière page depuis laquelle l'utilisateur courant appele le login. je vois pas plus simple que la méthode de TheTakylo

9821
,

Une autre façon possible de faire, mais cela depend de l'architecte du site et d'appeler et " d'injecter " (require, include ou JAVASCRIPT) un fichier PHP qui contient et gère le formulaire de connexion.

120902
,

En tout cas merci de vos réponses.
le souci que je rencontre bien que l'idée soit super c'est que mon site est en https... du coup, la valeur renvoyée est vide.
En espérant qu'un jour ils mettent en place le referer pour le https...
Je vais voir si je trouve des alternatives.. je suis bien embêté :'(

44227
,

Le https n'interfère pas avec la variable HTTP_REFERER, je vient d'effectuer un test sur mon site qui est en https et j'arrive bien a obtenir la varaible HTTP_REFERER.
Peut tu nous montrer ton script ?

Default
,

normalement tu as une fonction qui verifie que tu es bien logué ... qui est charger sur chaque page.

Tu rajoute un bout de code comme ceci (voir ci-dessous) juste avant la fonction header() (qui renvoie vers ta page login):

$_SESSION["login_referer_url"] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

Et dans ta page login l'endroit ou tu verifie le mot de passe etc tu fait un

header("location: ".$_SESSION["login_referer_url"]);
17162
,

Bonjour.
Il n'a pas besoin d'intégrer le protocole et le nom de domaine du site pour la redirection, sauf si son site ou certaines de ses pages peuvent être appelées autant par du http que du https, il lui suffit de mettre le chemin vers la page de redirection en la débutant évidemment par le slash pour signifier qu'il faut partir de la base du site.
Autre chose aussi, ce serait bien que vous métiez le nom de la clé pour le header sous son bon format, ce n'est pas location, mais Location.

120902
,

Voici mon code de ma page login

<?php require_once('fonction.php');  ?>
<?php 
reconnect_from_cookie();
if(isset($_SESSION['auth'])){
    header('Location: mon-compte.html?section=home');
    exit();
    }
if(!empty($_POST) && !empty($_POST['login_user']) && !empty($_POST['passwd_user'])){
    require_once 'db.php';
    $req = $pdo->prepare('SELECT * FROM t_user WHERE (login_user = :login_user OR email_user = :login_user) AND confirmed_date_user IS NOT NULL');
    $req->execute(array('login_user' => $_POST['login_user']));
    $user = $req->fetch();
    if($user == null){
        $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrect';
    }elseif(password_verify($_POST['passwd_user'], $user->passwd_user)){
        $_SESSION['auth'] = $user;
        $_SESSION['flash']['success'] = 'Vous êtes maintenant connecte';
        if($_POST['remember']){
            $remember_token = str_random(250);
            $pdo->prepare("UPDATE t_user SET remember_token = ? WHERE id_user = ?")->execute(array($remember_token, $user->id_user));
            setcookie('remember', $user->id_user.'=='.$remember_token.sha1($user->id_user.'amiiboActu'), time() + 60 * 60 * 24 * 7);
            }
        header('Location: index.html');
        exit();
    }else{
        $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrect';
    }
}
?>

<?php
    $title = "Se connecter à mon compte";
    $meta = "amiibo, nintendo, collection, figurine, amiibo-collection";
    $desc = "Vous avez rejoint la communauté AmiiboActu, conntez-vous à votre compte amiibo-collection.com et suivez toute l'actualité en temps réel";
?>
<?php include('inc/header.php');?>
<div id="content">
<div id="contentLeftBig" style='min-height:600px;'>
<h1>Se connecter</h1>
<div id="ariane">
<a href="index.html" title="Revenir à l'accueil de notre site amiibo-collection.com">Accueil</a>
&gt; <em>Se connecter</em>
</div>
<?php include('inc/info.inc.php'); ?>
<div id="article">
<form action="" method="POST">
<div class="form-group">
    <label for="pseudo">Pseudo ou email</label>
    <input type="text" name="login_user" id="pseudo" class="form-control">
</div>
<div class="form-group">
    <label for="pass">Votre mot de passe</label>
    <input type="password" name="passwd_user" id="pass" class="form-control">
</div>
<div class="form-group">
    <label>
        <input type="checkbox" name="remember" value="1" /> Se souvenir de moi
    </label>
</div>
<div class="form-group">
    <label>
        <input type="checkbox" name="remember" value="1" /> Se souvenir de moi
    </label>
</div>
<p align="center">
 <em> <a href="mot-de-passe-oublie.html" tile="Renvoyer le mot de passe">J'ai oublié mon mot de passe</a></em>
</p>
<p align="center">
<button type="submit" class="btn_register">Se connecter</button>
</p>
<p align="center"><a href="s-inscrire.html" title="Je m'inscris sur le site amiibo-collection.com">Je crée mon compte</a></p>
</form>
</div>
<div id="clear"></div>
</div>
</div>
<?php include('inc/footer.php');?>

J'invente rien, j'ai suivi le tuto présent sur ce site :)

Pour arriver à cette page, je viens d'une autre où je marque,

Pour vous connecter cliquez sur le lien suivant <a href="login.php" title=""> Ici </a>

Déjà, est ce la bonne méthode ou idée de faire un simple lien (j'ai suivi l'idée présente sur le site Judgehype qd les gens veulent mettre un commentaire

En tout cas merci de vos participations. Ca m'éclaire sur pas mal de point et met en évidence mes erreurs de programmation
mercii bcp

44227
,

Essaie d'ajouter un champ contenant la page précédente la page de login

<form action="" method="POST">
<!-- tu rajoute le champ avec comme valeur la page précédente --!>
<input type="hidden" name="url_referer" value="<?php echo $_SERVER['HTTP_REFERER'] ?>">
<div class="form-group">
    <label for="pseudo">Pseudo ou email</label>
    <input type="text" name="login_user" id="pseudo" class="form-control">
</div>
<!-- le reste --!>
</form>

et dans ton script php

// Tu redirige vers la valeur que contenait le champ url_referer
// header('Location: index.html');
header('Location: ' .  $_POST['url_referer']);
exit();

120902
,

Bonsoir,
dsl de revenir ici avec pas mal de tps d'absence.
Je te remercie pour ta réponse.
Je vais tenter de mettre en place ta dernière idée qui me semble être très intéressante
Encore dsl de ne pas avoir pu répondre avant
Cordialement ,