Rendre une page accessible par seulement une seule adresse.

Umkharss
Invité n'ayant pas de compte PHPfrance

22 août 2007, 15:53

Bien le bonjour à tous!
Je suis assez médiocre en PHP (je ne sais que ce que j'ai appris en bricolant directement des scripts)
et j'aimerais savoir s'il est possible de rendre une page nommée "page2.php" accessible seulement par le biais de "page1.php" et non pas de l'éxterieur (par exemple en tapant l'url dans la bar d'adresse).Je précise que je n'ai rien trouvé de tel en faisant des recherches sur google où sur le forum.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 août 2007, 15:57

Bonjour,

Il suffit pour cela que tu mettes en place un cookie (ou une session) que tu initialises sur page1.php
Sur page2.php, tu vérifies la présence du cookie, si il y est c'est que le visiteur est bien passé auparavant sur page1.php, sinon tu le renvoie sur une autre page (ou tu lui affiches un message d'erreur au choix)

Tu peux également vérifier la valeur de la variable $_SERVER['HTTP_REFERER'] mais cette solution n'est PAS fiable donc je te la déconseille.
Quand tout le reste a échoué, lisez le mode d'emploi...

Umkharss
Invité n'ayant pas de compte PHPfrance

22 août 2007, 16:07

<? 
/**
 * Protection micropaiement Rentabiliweb 
 */ 

session_start();

// id du document protégé 
$idprotect      = "66529";

// PHP5 avec register_long_arrays désactivé? 
if (!isset($HTTP_GET_VARS)) 
{ 
    $HTTP_SESSION_VARS    = $_SESSION; 
    $HTTP_SERVER_VARS     = $_SERVER; 
    $HTTP_GET_VARS        = $_GET; 
} 

//construction de la requête 
if ($idprotect==$HTTP_GET_VARS[id]) 
{
    $requete      = "http://secure.rentabiliweb.com/Micropaiement.php?act=ss&"; 
    $requete     .= $HTTP_SERVER_VARS['QUERY_STRING'];
    $requete     .= "&REMOTE_ADDR=".$HTTP_SERVER_VARS['REMOTE_ADDR']; 
    $tabrep       = @file($requete); 
}
else 
{
    unset($tabrep);
}


if($tabrep[0] == "OUI") 
{
    $HTTP_SESSION_VARS["RentaSess"]    = true; 
    header("Location: http://site.com/right2.php"); 

} 
else 
{
    $HTTP_SESSION_VARS["RentaSess"]    = false; 
    header("Location: http://site.com/wrong.php"); 
    exit(0); 
} 
?>
Voici le code de ma page appelée en fait right.php.En fait un page nommée "participer.php" contient un scrit rentabliweb où on rentre un code puis renvoie sur right.php.Si le code est bon on est redirigé sur right2.php (la page à protéger de l'extérieur) si il est faux on est redirigé sur wrong.php.
Est-ce que je peux récuperer la session créer dans right.php pour protéger right2.php?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 août 2007, 16:16

Bien sur, c'est le principe de la session que de te permettre d'accéder aux données que tu y enregistres depuis n'importe quelle page. Suffit juste de démarrer la session dans la ou les pages concernées avec session_start() et le tour est joué :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Umkharss
Invité n'ayant pas de compte PHPfrance

22 août 2007, 16:39

J'ai beau essayer je n'arrive à rien,je peux toujours accéder à la page en tapant

Code : Tout sélectionner

www.site.com/right2.php
:(

Eléphant du PHP | 193 Messages

22 août 2007, 16:50

Avec du code on pourra mieux t'aider qu'en essayant de deviner ce que tu as fait et l'erreur qui en sort ;)

ViPHP
ViPHP | 2291 Messages

22 août 2007, 17:00

J'ai beau essayer je n'arrive à rien,je peux toujours accéder à la page en tapant

Code : Tout sélectionner

www.site.com/right2.php
:(
Et un truc du genre :?:
session_start();
if (!isset($_SESSION['login'])) {

header ('Location: index.php');
    exit();

}
Le test est fait sur le login de session si pas de login de session il retourne automatiquement a la page index mais le test pourrais être fait sur autre chose :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Umkharss
Invité n'ayant pas de compte PHPfrance

22 août 2007, 17:00

J'ai tenté de reprendre le code de protection de right pour en reprendre la session.

Code : Tout sélectionner

<? /** * Protection micropaiement Rentabiliweb */ session_start(); // id du document protégé $idprotect = "66529"; // PHP5 avec register_long_arrays désactivé? if (!isset($HTTP_GET_VARS)) { $HTTP_SESSION_VARS = $_SESSION; $HTTP_SERVER_VARS = $_SERVER; $HTTP_GET_VARS = $_GET; } //construction de la requête if ($idprotect==$HTTP_GET_VARS[id]) { $requete = "http://secure.rentabiliweb.com/Micropaiement.php?act=ss&"; $requete .= $HTTP_SERVER_VARS['QUERY_STRING']; $requete .= "&REMOTE_ADDR=".$HTTP_SERVER_VARS['REMOTE_ADDR']; $tabrep = @file($requete); } else { unset($tabrep); } if($tabrep[0] == "OUI") { $HTTP_SESSION_VARS["RentaSess"] = false; header("Location: http://site.com/wrong.php"); exit(0); } ?>

Umkharss
Invité n'ayant pas de compte PHPfrance

22 août 2007, 17:07

dunbar j'ai essayer

Code : Tout sélectionner

<? session_start(); if (!isset($_SESSION['RentaSess'])) { header ('Location: index.php'); exit(); } ?>
Mais ca ne marche pas[/quote]

ViPHP
ViPHP | 2291 Messages

22 août 2007, 17:13

$_SESSION['RentaSess'] c'est quoi ?
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Umkharss
Invité n'ayant pas de compte PHPfrance

22 août 2007, 17:28

RentaSess c'est je crois le nom de la session.

ViPHP
ViPHP | 2291 Messages

22 août 2007, 17:32

RentaSess c'est je crois le nom de la session.
:-s Tu crois :?:

:arrow: Il y à des membres sur ton site :?:
:arrow: Des utilisateurs :?:
:arrow: Une authentification quelconque :?:
:arrow: Login :?:
:arrow: Pseudo :?:

Ou plus simplement une session :?:
Modifié en dernier par dunbar le 22 août 2007, 17:39, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2007, 17:37

(je reprend ce que j'ai écrit plus haut)

En fait un page nommée "participer.php" contient un scrit rentabiliweb où on rentre un code puis renvoie sur right.php.Là la page envoie une requête au site de rentabiliweb pour voir si le code existe dans leur bdd.Si le code est bon on est redirigé sur right2.php (la page à protéger de l'extérieur) si il est faux on est redirigé sur wrong.php.Le problème c'est qu'uon peut accéder à right2.php depuis l'éxterieur sans passer par le code et donc sans payer.

ViPHP
ViPHP | 2291 Messages

22 août 2007, 17:42

(je reprend ce que j'ai écrit plus haut)

En fait un page nommée "participer.php" contient un scrit rentabiliweb où on rentre un code puis renvoie sur right.php.Là la page envoie une requête au site de rentabiliweb pour voir si le code existe dans leur bdd.Si le code est bon on est redirigé sur right2.php (la page à protéger de l'extérieur) si il est faux on est redirigé sur wrong.php.Le problème c'est qu'uon peut accéder à right2.php depuis l'éxterieur sans passer par le code et donc sans payer.
Bin normalement et sauf avis contraire
$_SESSION['RentaSess']
Ceci devrais fonctionner je pense mais il doit y avoir un session start dans toute tes pages :!:
si je ne me trompe pas
Et surtout le session_start() avant tout autres codes
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2007, 17:58

J'ai bien procédé comme ca mais ca ne marche pas.
Il n'y a pas quelque chose de plus simple pour que right2.php n'accepte que les connexions venant de right.php ?