fonction verification de connection...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fonction verification de connection...

par BeRoots » 30 sept. 2006, 09:44

bon en fait cela ne fonctionnait pas :(

donc j'ai fait quelques modifs du genre création de fonctions vides dans chaques boucle if de fonction.php et j'ai retirer function devant chaque appel de fonction... Resultat ça fonctionne :)

mais je vient aussi de m'apercevoir que cela etait tout à fait inutile pour moi :lol:

je vais donc faire autrement histoire de symplifier un peu ;)

BeRoots, qui aura au moins appris à créé et appeler un fonction :D

par BeRoots » 30 sept. 2006, 00:17

oui un grand merci à vous deux :D
faire les choses c'est bien, les comprendre c'est mieux.

je peut donc continuer à vous expliquer mon problème vue que ceci est reglé...

en faite, tant cas chercher à externaliser des fonctionnaliter de mon code, autant essayer de regrouper un peu. Mon nouvelle objectif est donc de regrouper plusieur tache dans un même fichier qui sera appeler en include.

c'est là qu'on va commencer à parler de class et de fonction proprement dite.

vue que pour controler l'acces à mes pages et y associer certaines variables, je doit verifier si $_SESSION['login'] existe. Et vue que je redirige dans les deux cas mais pas si aucun controle d'acces n'est demandé, alors je doit appeler des function(); si je souhaite controler l'acces ou non. :?

en claire je doit faire un fichier fonction.php de ce genre:
<?php
// si non-connecté, initialisation des variables à afficher sur chaque page
if(!isset($_SESSION['login']))
{
    $login = 'Invité';
    $lien_deconnection = '';
    $admin = '';

    // création d'une fonction à appeller si on veut interdire l'acces aux non-connectés
    function connection_demander()
    {
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
    exit;
    }
}

// si connecté, initialisation des variables à afficher sur chaque page
elseif(isset($_SESSION['login']))
{
    $login = $_SESSION['login'];
    $lien_deconnection = '<a href="deconnect.php">deconnection</a>';
    $admin = '';
          if($session['login'] == 'administrateur')
          {
           $admin = '<a href="admin.php">lien vers admin</a>
          }
    // création d'une fonction à appeller si on veut interdire l'acces aux connectés
    function deconnection_demander()
    {
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_logout.php';
    header ("Location: http://$host$uri/$page");
    exit;
   }
}
?>
ensuite sur chaque page non-controler on aura juste:
<?php
// inclusion des variables propre à la page
include("includes/fonction.php");

// contenu de la page
?>
sur chaque page où l'on doit etre loggé, on aura juste:
<?php
// inclusion des variables propre à la page
include("includes/fonction.php");
// appel de la fonction de redirection
function connection_demander();

// contenu de la page (si toutefois la fonction connection_demander n'a pas mis fin au script)
?>
sur chaque page où l'on doit etre non-loggé, on aura juste:
<?php
// inclusion des variables propre à la page
include("includes/fonction.php");
// appel de la fonction de redirection
function deconnection_demander();

// contenu de la page (si toutefois la fonction deconnection_demander n'a pas mis fin au script)
?>
que penser vous de ceci? est ce que cela devrai marcher? peut on simplifier en definisant des class? :-k

merci d'avance ;)

par Erazer » 29 sept. 2006, 16:30

voilà! Merci Sadeq :wink:

par sadeq » 29 sept. 2006, 16:27

La bonne raison de mettre un exit() après un header() est pour mettre fin à l'exécution du code car cette dernière ne s'arrête pas automatiquement par l'effet de header()

C'est normal, le header ne fait que rediriger le serveur vers une nouvelle ressource et remplit donc le buffer de sortie à partir de l'echo de la ressource.

C'est pourquoi header() ne peut utiliser un buffer de sortie déjà intialisé avant son exécution par un echo précédent.

Mais après le passage d'un header() le buffer est envoyé au client, et aucun echo ne sera honoré car le buffer de sortie est dédié au header.

Seules des instructions silencieuses s'exécutent an arrière plans après le passage d'un header (comme les accès fichier, les calculs, les accès DB...)

Regares ce test :
<?php 
//cet echo avant header va le dérranger car il va occuper le buffer de sortie
//echo "<p>lol, la page p0.htm sera affiché!";
header ("Location: p0.htm");
//tout echo après header ne sera pas affiché car le buffer de sortie est occupé par header
echo "<p>lol, la page p0.htm est affiché!";
//par contre, cette instruction silencieuse s'exécute après le header
file_put_contents("resultat_header.txt", "<p>lol, la page p0.htm est affiché!");
?>

par Erazer » 29 sept. 2006, 16:08

if(!isset($_SESSION['login']))
{
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
    exit; // ici le exit en question
} 
pour ma part, je dirai ceci. Le else n'est pas vraiment nécéssaire vu le exit.

en ce qui concerne le exit.
J'ai pour souvenir d'avoir lu un article qui conseillé de le mettre, je n'ai malheurement pas retenu la raison

par BeRoots » 29 sept. 2006, 13:40

oui mais ce que je veut savoir c'est si le exit est vraiment indispensable :?

donc mieux vaut il faire ainsi:
<?php // on verifie si l'utilisateur est identifier. Si NON, on redirige et si OUI on continue
if(!isset($_SESSION['login']))
{
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
}
?>
ou alors comme ça:
<?php // on verifie si l'utilisateur est identifier. Si NON, on redirige et si OUI on continue
if(!isset($_SESSION['login']))
{
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
    exit; // ici le exit en question
}
else
{
// sinon on poursuit le script où celui ci est inclus
// ici peut être un exit; ou un kill; ou je sait pas afin de terminer proprement...
}
?>
ou peut être que les deux sont bon... :-k

rappel: ces deux codes sont des code inclue sur des page dont on veut controlé l'acces.

un avis? ;)

par Erazer » 29 sept. 2006, 13:15

si le exit se trouve dans le if, il ne devrait pas avoir de problème

par BeRoots » 29 sept. 2006, 12:55

en fait, j'ai fait cela:
// on verifie si l'utilisateur est identifier. Si NON, on redirige et si OUI on continue
if(!isset($_SESSION['login']))
{
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
}
?> 
tout fonctionne mais une derniere chose me traquasse: j'ai essayer de mettre exit; ou die; en fin de ce code, mais là, si l'utilisateur est connecté, ma page ne s'affiche pas (page blanche).

sachant que le code ci-dessus est appeler en include(), est ce que ce dernier peut être consideré comme complet ou faut il que je termine l'execution du script par quelque chose?

merci d'avance ;)

par Erazer » 29 sept. 2006, 12:41

il suffit d'inclure le fichier de vérification, la comparaison se fera dans ce fichier

je dirai juste que tu peux faire ceci
if( !isset($_SESSION['login']) ) {
 
 header('Location: /acces_denied_login.php');
 exit(0);

}
?>

fonction verification de connection...

par BeRoots » 29 sept. 2006, 11:49

salut à tous :)

afin de restraindre l'acces à certaines pages de mon site, je fonctionne comme suit:
<?php
// initialisation de la session
session_start();

// on verifie si l'utilisateur est identifier (donc si il y a un variable de session login de créé).
// Si NON, on redirige et si OUI on continue
if(!isset($_SESSION['login']))
{
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
}

// Si l'utilisateur est loggé, on traite la page à afficher
else
{
include("includes/xhtml_head_site.php");
include("includes/xhtml_foot_site.php");
echo $xhtml_head_site;
?>
     <p>blablablablabla</p>
<?php
echo $xhtml_foot_site;
}
?>
afin de clarifier mon code php, j'aimerai savoir si je peut externaliser la partie verification de connection dans un fichier verif_connection.php :-k

ensuite mon code de la page controlée deviendrai ceci
<?php
// initialisation de la session
session_start();

include("includes/verif_connection.php");   // ici j'inclus verif_connection
include("includes/xhtml_head_site.php");
include("includes/xhtml_foot_site.php");
echo $xhtml_head_site;
?>
     <p>blablablablabla</p>
<?php
echo $xhtml_foot_site;
}
?>
ET dans mon fichier verif_connection.php:
<?php
// on verifie si l'utilisateur est identifier. Si NON, on redirige et si OUI on continue
if(!isset($_SESSION['login']))
{
    $host = $_SERVER['HTTP_HOST'];
    $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $page = 'acces_denied_login.php';
    header ("Location: http://$host$uri/$page");
}

// Si l'utilisateur est loggé, on traite la page à afficher
else
{
die;
}
ma question est la suivante: est ce que la redirection va ce faire en includant simplement le fichier verif_connection.php, ou faut il absolument verifier une condition pour avoir cette redirection?

merci d'avance ;)