Page 1 sur 2

Rendre une page accessible par seulement une seule adresse.

Posté : 22 août 2007, 15:53
par Umkharss
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.

Posté : 22 août 2007, 15:57
par @rthur
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.

Posté : 22 août 2007, 16:07
par Umkharss
<? 
/**
 * 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?

Posté : 22 août 2007, 16:16
par Ryle
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é :)

Posté : 22 août 2007, 16:39
par Umkharss
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
:(

Posté : 22 août 2007, 16:50
par Vikchill
Avec du code on pourra mieux t'aider qu'en essayant de deviner ce que tu as fait et l'erreur qui en sort ;)

Posté : 22 août 2007, 17:00
par dunbar
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:

Posté : 22 août 2007, 17:00
par Umkharss
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); } ?>

Posté : 22 août 2007, 17:07
par Umkharss
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]

Posté : 22 août 2007, 17:13
par dunbar
$_SESSION['RentaSess'] c'est quoi ?

Posté : 22 août 2007, 17:28
par Umkharss
RentaSess c'est je crois le nom de la session.

Posté : 22 août 2007, 17:32
par dunbar
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 :?:

Posté : 22 août 2007, 17:37
par Invité
(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.

Posté : 22 août 2007, 17:42
par dunbar
(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

Posté : 22 août 2007, 17:58
par Invité
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 ?