samedi 7 mai 2011

Les sessions php

Qu'est-ce qu'une session


Les sessions sont plus sécurisées que des cookies car stockées sur le serveur .Elles ont pour fonction de garder confidentielles des données vous concernant. Grace aux sessions il est possible de gérer un panier d'achat , authentifier un visiteur, etc.....

Au lieu de stocker vos informations chez le visiteur, vous les stockez sur le serveur.Mais la session n'a qu'un temps de vie limité et elle peut être aussi la cible d'une attaque , donc méfiance quand au stockage de données trop confidentielles 

Cas concret de session

Voici un cas concret:
<?php
include 'session.php';
$bouton = $_POST['bouton'];
if(!empty($bouton)) {
$log = trim($_POST['log']);
$pass = trim($_POST['pass']);
if ($log=='jenny' && $pass == 'foo') {
$_SESSION['login'] = 'ok';
echo ' >> suite >>';
}
else {
echo 'mauvais login/pass';
}
}
?>

<form action="exemple6.php" method="post">
Login :<input type="text" name="log"
value="">

Pass :<input type="text" name="pass" value="">

<input type="submit" value="envoyer" name="bouton">
?>


Voici comment récupérer les variables session par le bon tableau. Récupération d'une session

<php
include 'session.php';
if($_SESSION['login'] == 'ok') {
echo 'vous êtes bien connecté';
}
else {
die('pas en session');
}
?>

Variables de sessions utiles

Voici quelques variables de session qui peuvent vous servir : - Démarrer une session : session_start();
- Enregistrer une variable de session : session_register();
- Vérifier si une variable est déclaré pour la session en cours : session_is_registered();
- Destruction de la session en cours : session_destroy();
- Destruction de toutes les variables pour la session en cours : session_unset();
- Effacer une variable de session : session_unregister();
- Le numéro de session en cours : session_id();
- Le nom de la session par défaut (souvent c'est PHPSESSID) : session_name();

Cas d'une session stockant des variables

Deux variables $login et $password seront stockées dans la session et seront donc accessibles pour les autres pages affichées durant cette session.
<?php
session_start();
$login = 'deny';
$password = 'pass';
session_register('login', 'password');
?>

Pour afficher nos variables de session:
<?php
function test_session() {
$GLOBALS['variable'] = 'pass';
session_register('variable');
}
test_session();
echo "var de session : {$_SESSION['variable']}";
?>

Suppression d'une variable de session

<?php session_start();
$_SESSION['nom'] = 'deny';
echo $_SESSION['nom']; // affiche deny
session_destroy();
unset($_SESSION);
echo $_SESSION['nom'] ; // n'affiche rien
?>

Convertir des données en utf-8

$var = htmlspecialchars($var, ENT_COMPAT, 'UTF-8');
$var = iconv("UTF-8", "UTF-8", $var)
$var = iconv("ISO-8859-1","UTF-8",$var);

Détection d'intrusion

Certains sites possèdent des applications qui filtrent des codes potentiellement dangereux visant à s'éxecuter sur le serveur. Ceci dit, la détection des intrusions y est peu performante. On peut prévenir la plupart des attaques applicatives avec des outils de surveillance. La plupart d'entre nous n'ont pas le temps d'inspecter leur serveur toutes les 5 minutes ou même chaque jour, ou n'ont pas les droits pour consulter les logs et on pourrait vous attaquer au moment ou vous allez déjeuner. Cela serait un excellent commencement que de créer une petite fonction de surveillance. Voici un code simple écrit en PHP qui détectera une intrusion et vous préviendra au moment ou elle se produit 

function LogIt($error,$input) {

$ip  = $_SERVER['REMOTE_ADDR']; 
$ho = $_SERVER['HTTP_USER_AGENT']; 
$qs  = $_SERVER['QUERY_STRING']; 
$ti   = time();
$log = "$ti | LOG: | $error | $input | $ip | $ho | $qs";
mail("admin@site.com", "bot@site.com", $log);

}

# vous pouvez l'utiliser de la sorte:

if(!is_numeric($input)) {

# If input is not numeric while you expect so, it could be SQL injection.
LogIt("Is not numeric",$input);

} else { 

# handle it further.
(int)$input;

 }

On peut invoquer cette fonction partout dans votre programme
 et indiquer ce qu'elle doit vous rapporter.

Remplacer les caractères accentués d'une chaîne

function OterAccents($chaine)
// Remplacer les caractères accentués d'une chaîne
{
return( strtr( $chaine,
 "ÀÁÂĂÄĆàáâăäćÒÓÔŐÖŰòóôőöűÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿŃń",
  "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" )
   );
   }

Limiter le nombre de caractères d'une variable

Afin de réduire la taille d'un texte par exemple :
<?php  print(substr($,0,150))?>

Afficher le contenu du dossier courant

<?php
$handle = opendir(getcwd());
//On initialise les variables.
$fichiers = '';
$dossiers = '';
while (false !== ($file = readdir($handle))) {
 if(substr(strrchr($file, '.') ,1)) {
 // c'est un fichier car il a une extension
        $extension = substr(strrchr($file, '.') ,1);
        $fichiers .=  "<li><a href='voirfichier.php?f=".$file."&
langage=".$extension."'>".$file."</a></li>";
  } else { // c'est un dossier
        $dossiers .= '<li id="'.$file.'"><
img src="folder.png"> <a href="#'.$file.'"
 onClick="javascript:voirDossier(\''.$file.'\');">'.$file.'</a></li>';
   }

}
echo $dossiers;
echo $fichiers;
closedir($handle); 
     ?>

Lister un repertoire en php

<?php
  $handle = opendir('.');
    while (false !== ($file = readdir($handle)))
 { 
   if(is_dir($file))
    echo("
  $file \n");
    else echo("
  $file \n");
         }
   closedir($handle);
     ?>

Aspirateur de pages

Exemple simpliste :
$Html = @file_get_contents($Url);
echo $Html 
 
Je n'en dirai pas plus ^^

Tester si un serveur est up ou down

Voici une méthode (qui utilise fsockopen), très simple à mettre en oeuvre et qui marche du tonnerre !  ================== Le serveur de deny est actuellement...
<?php
$test = @fsockopen("monserveur.no-ip.com", 80, &$errno, &$errstr);
if (!$test) {
    echo "Offline";
} else {
 echo "Online";
    fclose($test);
}
?>

Restreindre un utilisateur à une base

Voici une procédure via mysql (ou tout autres interpréteurs de requêtes sql type : phpMyAdmin, mysqlfront...) par ex :

create database matable;
GRANT ALL PRIVILEGES ON matable.* to login@localhost identified by
'motdepasse';
flush privileges;
ou localhost peut être remplacé par une adresse ip, un nom de machine, une classe (192.168.% par ex)

Temps de chargement d'une page web

Ajouter ce script au debut de la page :

<?
function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}
$debut = getmicrotime();
>

Et celui-ci à la fin :

<?
$fin = getmicrotime();
echo "Page générée en ".round($fin-$debut, 3) ." secondes.
";
?>
 
Très utile et fait très professionnelle ^^

Envoi d'un message lors du plantage de Mysql

 Cela peut s'avérer utile...
<?
//on essaie de se connecter a mysql
if (!@mysql_connect ("localhost","","")) {
error_log ("Erreur de connexion à Mysql", 1, "webmaster@monsite.com");
//si la connexion est impossible alors on envoie un mail au webmaster
?>

Interdire le téléchargement d'images par d'autre sites

Dans un fichier .htaccess placer :
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.monsite.com/.*$ [NC]
ReWriteRule .*\.(gif|png|jpe?g)$ - [F]

Tout simplement ^^

Bien débuter en PHP

Bonjour à tous,
Ce blog sera une bibliothèque de scripts créés ou repris  par mes soins en espérant qu'ils vous serviront à développer votre futur site :)
Laissez un petit commentaire afin que je sache si ce blog vous plaît. Merci