_ Accueil Pour site PHP PHP: Sessions. Une description détaillée de l'œuvre comme une explication du mécanisme.
Publicité

Sessions PHP. Une description détaillée de l'œuvre comme une explication du mécanisme.

Introduction
Comme prévu, et comment ils fonctionnent session?
Portée.
Les problèmes possibles et leurs remèdes.
Sécurité
Informations supplémentaires:
Un exemple d'utilisation de l'authentification des sessions
Commentaires

Introduction
Session - c'est en fait très simple.
Vous avez juste besoin de comprendre ce dont ils ont besoin et comment construire.
D'abord pour répondre à la première question.
Comme le montre dans la section pertinente de cette FAQ, le serveur web ne supporte pas une connexion permanente au client, et chaque demande est traitée comme une nouvelle, sans aucun lien avec les précédents.
C'est, nous ne pouvons pas retracer toutes les demandes provenant du même visiteur, ni pour lui de garder les variables entre les scans de pages individuelles. C'est pour résoudre ces deux problèmes ont été inventés session.
En fait, la session, en un mot - est un mécanisme pour identifier le navigateur et crée un fichier pour que le navigateur sur le serveur, qui stocke les variables de session.

Détails à peindre la nécessité d'un tel mécanisme, je ne veux pas. Ce sont des cas d'école de la façon dont le panier dans un e-magasin, l'autorisation, et c'est la même pas des questions tout à fait banales, telles que la protection des parties interactives du site contre le spam.

En principe, assez facile à faire vos propres sessions analogiques, pas aussi fonctionnel que le PHP intégré, mais de nature similaire. Dans les cookies et la base de données.
Lorsque vous êtes invité pour le look de script, est venu un cookie avec ce nom. Si les cookies ne sont pas, puis le mettre dans la base de données et d'écrire une nouvelle ligne avec les données des utilisateurs. Si le cookie existe, alors lire les données de la base de données. Une autre requête à partir de la base de données supprimer d'anciens enregistrements et maintenant nous avons préparé le mécanisme des sessions. Est un jeu d'enfant. Mais il ya des nuances qui font qu'il est préférable d'utiliser intégré dans les sessions.

Comme prévu, et comment ils fonctionnent session?
Vous devez d'abord en quelque sorte d'identifier votre navigateur. Pour ce faire, donnez-lui un ID unique et lui demander de passer à chaque requête. J'ai honte de l'admettre, mais quand j'ai appris sur les sessions, je pensais que c'était un mécanisme spécial, une nouvelle façon de communiquer avec le navigateur de serveurs - ". Session" Ce qui est l'identifiant de session est passé d'une manière spéciale. La déception fut cruelle.
Les séances utilisation standard, des méthodes bien connues de transmission de données. En fait, l'autre-et puis tout simplement pas.
ID - Il s'agit d'une variable commune. Par défaut, son nom - PHPSESSID.
Problème PHP de l'envoyer au navigateur, de sorte qu'il a renvoyé à la prochaine requête. Dans la section FAQ de ce qui précède, il est clair qu'une variable ne peut être transféré de deux façons: dans les cookies ou POST / GET.
PHP utilise à la fois.
Sont responsables de il ya deux paramètres dans le fichier php.ini:
- если равно 1, то PHP передает идентификатор в куках, если 0 - то нет. session.use_cookies - si égal à 1, PHP va passer l'ID dans un cookie si 0 - pas.
если равно 1, то PHP передает его, добавляя к URL и формам, если 0 - то нет. session.use_trans_sid si égal à 1, PHP va passer par l'ajout d'une URL et les formes, si 0 - pas.
или в файлах настройки веб-сервера Pour modifier ces paramètres et d'autres sessions peuvent être de la même manière que d'autres paramètres PHP - dans votre fichier php.ini, ainsi que l'aide de la ini_set() ou dans les fichiers de configuration, le serveur Web

() Si seulement le premier, puis le début de la session (à chaque fois que vous appelez session_start () session_start () ) Définir un cookie sur le client. Le navigateur correctement à chaque fois que vous demandez ce cookie et PHP retourne un identifiant de session. Les problèmes commencent quand un cookie navigateur ne revient pas. Dans ce cas, ne pas obtenir l'identifiant du cookie, PHP va toujours commencer une nouvelle session, et le mécanisme ne fonctionne pas.

Si seulement le deuxième, puis le cookie n'est pas placé. Et il ya quelque chose pour laquelle, essentiellement, en fait, consiste à utiliser les sessions intégrés. Une fois le script fait son travail, et la page est entièrement formé, PHP regarde tout cela et ajoute à chaque lien et chaque forme de transmission des identifiants de session. Il ressemble à ceci:
превращается в <a href="/index.php">Index</a> devient
<a href="/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f">Index</a>
et ajouté aux formes du champ caché
<input type="hidden" name="PHPSESSID" value="00196c1c1a02e4c37ac04f921f4a5eec" />
Et le navigateur lorsque vous cliquez sur un lien ou en appuyant sur un bouton sur un formulaire, envoyer une variable de requête que vous voulez que nous - l'identifiant de session!
Pour des raisons évidentes, l'identifiant est ajouté uniquement dans les liens relatifs.

Théoriquement, c'est dans nos biscuits faits maison et des séances dans la base de données, vous pouvez posséder, les mains assignées à tous les liens de transmission Eid - et puis nos propres séances se dérouleront de manière indépendante des cookies. Mais vous serez d'accord - agréable, quand ce travail ne quelqu'un d'autre? ;-)

Par défaut, les dernières versions de PHP include les deux options. Comme PHP est dans ce cas? Cook a toujours fait preuve. Une référence avtodopolnyayutsya que si PHP ne trouve pas un cookie avec l'identifiant de session. Lorsque le temps prvy utilisateur pour cette session vient à votre site, il a mis le cookie, et complétée par référence. Dans la requête suivante si les cookies sont pris en charge, PHP voit le cookie et ne sont plus des liens add. Si les cookies ne sont pas de travail, PHP continue d'ajouter correctement l'id de liens, et la session n'est pas perdu.
Les utilisateurs qui exécutent le cookie verrez un lien de long avec ID qu'une seule fois.

Ouf. Avec le transfert d'un identifiant avez terminé.
Maintenant, nous devons l'attacher à un fichier de données sur le côté serveur.
PHP le fera pour nous. Il suffit d'écrire
session_start ();
$_SESSION [ 'test' ]= 'Hello world!' ;
Et PHP écrire dans le fichier associé à cette session, le test variable.
Il est très important remarque.
- особенный. Le tableau $_SESSION - spéciale.
Il en fait, il ya des variables que nous allions mettre à la disposition dans une variété de scripts.
Pour placer une variable dans la session, vous devez l'assigner à un élément du tableau $ _SESSION.
Pour obtenir sa valeur - assez pour se tourner vers le même élément. Un exemple serait un peu plus bas.

Construire des déchets - l'élimination des fichiers obsolètes, PHP est également lui-même impliqué. Ainsi que le cryptage des données et un bouquet de toutes sortes d'autres choses utiles. À la suite de ce travail de soins avec des séances est très simple.
Ici, nous sommes, en effet, venir à l'exemple des sessions.
L'exemple est très faible:
<?
session_start
();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз. " ;
echo
"<br><a href=" . $_SERVER [ 'PHP_SELF' ]. ">обновить" ;
?>
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз. " ;
echo
"<br><a href=" . $_SERVER [ 'PHP_SELF' ]. ">обновить" ;
?>
Мы проверяем, есть ли у нас в сессии переменная counter, если нет, то создаем ее со значением 0, а дальше выводим ее значение и увеличиваем на единицу. <?
session_start ();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз. " ;
echo
"<br><a href=" . $_SERVER [ 'PHP_SELF' ]. ">обновить" ;
?>
Nous vérifions si nous avons un compteur variable de session, si elle n'est pas, créez-le avec la valeur 0, puis tirer sa valeur et par une augmentation. Augmenter la valeur écrite dans la session et le prochain appel à une variable de script sera mis à 1, et ainsi de suite.
C'est très simple.

Pour accéder à la variable de session sur toutes les pages Web, vous devez écrire une seule ligne au début de chaque fichier, dans lequel nous avons besoin de session (!):
session_start ();
Et puis reportez-vous aux éléments du tableau $ _SESSION. Par exemple, la vérification d'autorisation devrait ressembler à ceci:
session_start ();
if (
$_SESSION [ 'authorized' ]<> 1 ) {
header ( "Location: /auth.php" );
exit;
}

Retrait des variables de la session.
, то достаточно написать Si vous avez register_globals=off , il suffit d'écrire
unset( $_SESSION [ 'var' ]); Si non, alors à côté de lui pour écrire
session_unregister ( 'var' );
Portée.
Il est important de comprendre pourquoi la session devrait être utilisé et à quelles - pas.

Tout d'abord, rappelez-vous que la session peut être appliquée que lorsque vous en avez besoin pour l'utilisateur, et non pas pour réparer ses obstacles. Après tout, il peut à tout moment de se débarrasser de l'ID!
Par exemple, lors de la vérification que la personne remplit un formulaire et non un script, l'utilisateur est intéressé par la session de travailler - sinon il ne serait pas en mesure d'envoyer le formulaire! Mais pour limiter le nombre de demandes à la session de script n'est pas bonne - un script malveillant tout simplement pas retourner l'ID.

Deuxième. Il est important de bien imaginer le fait que la session - une session avec le site, car il comprend les gens. Il est venu, a travaillé, fermé le navigateur - la séance est terminée. Comme la session pour les films. Vous voulez voir un autre - acheter un nouveau billet. Démarrer une nouvelle conversation. Il ya une explication technique. Mécanisme de session garanti ne fonctionne que est de fermer votre navigateur. Après tout, le client peut ne pas fonctionner les cookies, mais dans ce cas, bien sûr, le tout complété par un identifiant liens disparaissent avec sa fermeture.
Cependant, la session peut être perdue, et sans fermer le navigateur. Compte tenu des restrictions décrites dans la section principale de cette FAQ, le mécanisme de sessions ne peut pas détecter lorsque l'utilisateur ferme le navigateur. Il utilise un délai - un temps prédéterminé après quoi, nous croyons que l'utilisateur a quitté le site. Le réglage par défaut est de 24 minutes.
Si vous souhaitez stocker les informations utilisateur pour une plus longue période, puis utiliser un cookie et, si nécessaire - une base de données sur le serveur. En particulier, c'est la façon dont tous les l'authentification populaire système d'exploitation:
- En fait d'identifier une session utilisateur commence, et un signe avtorizovannosti qui lui est passé.
- Si vous avez besoin de «se souvenir» de l'utilisateur, puis il a mis le cookie, il identifie.
- La prochaine fois que l'utilisateur entre le site à se connecter, il doit entrer un mot de passe, ou le système va le reconnaître par le cookie préalablement définie et démarre la session. Une nouvelle session plutôt que de continuer l'ancienne.

Troisièmement, nous ne devrions pas commencer la session, sans discrimination, chaque entrée sur le site. Cela va créer une charge tout à fait inutile. Ne pas utiliser la session pour rien - par exemple, en mètres. Cela appelle des séances spaylog est, bien sûr, sur la base des approches statistiques, plutôt que par le mécanisme des sessions, similaires à php-shnomu.
Aussi, prenez un moteur de recherche qui indexe votre site. Si le robot ne supporte pas les cookies, puis le php par défaut de fournir des liens vers le PHPSESSID, que - soglasistes - peut-être pas beaucoup comme le moteur de recherche, qui est répandu pour être dynamique et de tels liens ne sont pas favorables, mais ici tout pour chaque entrée - nouvelle adresse !
Si la session est utilisé pour restreindre l'accès à l'espace privé de ce site est tout simplement un moteur de recherche et il ne devrait pas être indexé.
Si il est nécessaire de montrer la même page que les utilisateurs autorisés et non autorisés, alors il y aura un truc - démarrer une session seulement à ceux qui sont entrés le mot de passe, ou ceux qui ont déjà commencé la session.
() Pour ce faire, le haut de chaque page au lieu de simplement session_start () session_start () écrire
if (isset( $_REQUEST [ session_name ()])) session_start (); Ainsi, nous commençons la session seulement à ceux qui ont envoyé l'identifiant.
Par conséquent, nous devons avoir pour la première fois de l'envoyer à l'utilisateur - au moment de l'autorisation.
() Si le nom est correct et remise - écrire session_start () session_start () !

Les problèmes possibles et leurs remèdes.

Les erreurs les plus courantes que PHP donne lorsque vous essayez de travailler avec les sessions sont les suivantes:
Deux d'entre eux,
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

causée par la même raison, la solution décrite dans ce Faux est
La troisième,
(ранее она выглядела, как Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) ), Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number (avant qu'il ne ressemblait Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) ),
si vous le traduire en anglais, explique en détail le problème: pas disponible spécifié dans path php.ini dans le répertoire où les fichiers sont écrits dans les sessions. Cette erreur est le plus facile à corriger. Juste pour mettre le répertoire qui existe et est accessible en écriture, par exemple,
session.save_path = c:\windows\temp
Et ne pas oublier de redémarrer Apache après cette.

Comme il s'avère, L'ingéniosité humaine n'a pas de limites, donc j'ai dû expliquer:
troisième message d'erreur (ne peut pas trouver un répertoire) va inévitablement conduire à l'émergence des deux premiers, parce que le message d'erreur - il est sortie vers le navigateur et après les en-têtes ne peuvent pas être utilisés. Donc, ne vous précipitez pas pour parvenir à une conclusion prématurée, mais d'abord la liste de la bonne façon!

Le problème le plus courant lorsqu'il s'agit de l'héritage douloureux de ces séances est register_globals. Ne laissez pas les noms des variables de script qui correspondent à l'indice du tableau $ _SESSION!
Lorsque register_globals est activé sur les valeurs va écraser l'autre, et vous êtes coincé.
Et avec register_globals = off une autre erreur s'affiche: "Votre script s'appuie éventuellement sur une session effet secondaire qui a existé jusqu'en PHP 4.2.3.", Si il est une variable dans une session de script, qui n'a aucune valeur, et la variable globale portant le même nom . Pour se débarrasser de lui, nous devons toujours initialiser les variables avant d'utiliser (ou au moins vérifier l'existence) et ne pas donner les noms des variables globales, qui coïncident avec les indices du tableau $ _SESSION.

Lorsqu'il ne travaille pas, mais aucun message ne s'affiche, puis ajoutez au tout début du script de deux lignes sont responsables pour le retrait de toutes les erreurs sur l'écran - il est possible que l'erreur est, mais vous n'avez tout simplement pas les voir.
ini_set ( 'display_errors' , 1 );
error_reporting ( E_ALL );
ou voir l'erreur dans le error_log. En général, les messages d'erreur d'affichage est le même thème au-delà du champ d'application de cet article, si juste s'assurer au moins que vous puissiez les voir. Juste prodrobnee de trouver des bogues peut être trouvée dans cette section .

Si vous croyez qu'il n'y a pas d'erreurs, mais cet exemple ne fonctionne pas de toute façon, il est possible en PHP n'inclut pas le transfert de l'Identifiant par url, et des biscuits pour une raison quelconque, ne fonctionnent pas.
Voir ce que vous avez avec les cookies.
En règle générale, si vous "ne fonctionne pas" session, vous devez d'abord essayer de passer entre les mains identifiant de session, c'est-à-faire le lien, et de lui attribuer un identifiant:
<?
session_start
();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз.<br>
<a href="
. $_SERVER [ 'PHP_SELF' ]. '?' . session_name (). '=' . session_id (). ">обновить</a>" ;
?>
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз.<br>
<a href="
. $_SERVER [ 'PHP_SELF' ]. '?' . session_name (). '=' . session_id (). ">обновить</a>" ;
?>
При этом следует убедиться, что не включена директива session.use_only_cookies , которая запрещает PHP принимать идентификатор сессии, если он был передан через URL <?
session_start ();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз.<br>
<a href="
. $_SERVER [ 'PHP_SELF' ]. '?' . session_name (). '=' . session_id (). ">обновить</a>" ;
?>
Cela devrait faire en sorte que la directive n'est pas inclus session.use_only_cookies , qui interdit l'id PHP en prenant session, si elle a été adoptée par l'URL

- в 4.1 (До этого использовался $HTTP_SESSION_VARS ). Si cet exemple ne fonctionne pas, alors le problème est soit typo banales (la moitié des «problèmes» avec les sessions vient du nom mal orthographié variable) ou des versions trop anciennes de PHP: séances de soutien parus dans la version 4.0, et le tableau $_SESSION - au paragraphe 4.1 (jusqu'à Nous avons utilisé le $HTTP_SESSION_VARS ).
Si le travail - le problème est dans le cookie. Track - un cookie qui met le navigateur de serveur si le navigateur, il retourne. La recherche est très utile, en regardant regardant les en-têtes HTTP échangées entre le navigateur et le serveur.
Une explication du principe de cookies va plus loin et texte de façon trop, mais au moins vous assurer que le serveur envoie un cookie avec l'ID et le navigateur - retours. Et les mêmes identifiants coïncident les uns avec les autres =)
Réglez le cookie devrait ressembler à
или как Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; ou en tant que
(если вы запрашиваете скрипт не из корневого каталога) Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; path=/ (sauf si vous demandez script n'est pas dans le répertoire racine)
La réponse du serveur devrait ressembler à
либо Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6 ou
если браузер возвращает другие куки, кроме идентификатора сессии. Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b si le navigateur renvoie le cookie autre que l'ID de session.

Si vos cookies de votre navigateur ne reviendra pas - vérifier si le cookie du tout.
Assurez-vous que le domaine auquel vous faites allusion, a un nom normal (qui a au moins un point et ne pas contenir de caractères illégaux tels que souligne) et nettoyer le cache de votre navigateur - sont deux des raisons principales pour les cookies Kotormo peut ne pas fonctionner.

Si l'exemple de ce travail, et votre propre code - non, le problème n'est évidemment pas dans les sessions, et dans l'algorithme. Regardez où la variable a perdu dans les étapes.

Un autre problème peut se produire si vous utilisez un en-tête de redirection ou de navigation en utilisant JavaScript.
, но не делает этого для header-ов, яваскрипта, мета-тегов. Le fait que PHP ajoute automatiquement l'identifiant de session uniquement à des espèces inscrites à <a href=> , mais il ne le fait pas pour les balises d'en-tête s javascript, méta.
Par conséquent, il est nécessaire d'ajouter l'ID avec ses mains, comme ceci:
header ( "Location: /script.php?" . session_name (). '=' . session_id ());
Il convient de rappeler que la session php lochit fichier. Autrement dit, si votre script démarre une session et de longues courses, et l'autre à ce temps à essayer de le démarrer avec le même identifiant, il se bloque. Par conséquent, dans les scripts de longue durée devrait démarrer une session uniquement lorsque cela est nécessaire, puis le fermer, à l'aide session_write_close()

Il est également très rare, et il est difficile d'apparaître, le problème est que la mise en session.save_handler a une valeur autre que les fichiers. Si ce n'est pas - fixer.

Sécurité
Sessions de sécurité - un vaste sujet. Par conséquent, mettre l'accent sur plusieurs points clés.
La plupart des manuels scolaires - de ne pas transmettre l'ID via l'URL. Car il est écrit, même dans le fichier php.ini, mais cela limite la fonctionnalité des sessions. Si vous décidez de suivre ce conseil, à l'exception session.use_trans_sid = 0, n'oubliez pas de session.use_only_cookies = 1
Il est conseillé d'attacher la session à l'adresse IP: ainsi, si l'ID est volé, le méchant ne serait pas capable de l'utiliser dans la plupart des cas.
Il est recommandé d'utiliser le session.save_path directive, avec laquelle de spécifier votre propre répertoire pour stocker les fichiers de session. Il est plus sûr que quand ils sont stockés dans le répertoire temporaire générale du serveur par défaut.

Informations supplémentaires:
  • En plus des témoins, le mécanisme de session envoie également les en-têtes d'interdire la mise en cache de pages (le même cache limiteur). Pour le html est juste et nécessaire. Mais quand vous essayez de script d'une autorisation d'inspection, donner le fichier, puis Internet Explorer refuse de télécharger. En raison de ce titre. Appeler
    session_cache_limiter ( "private" ); avant le début de la session de résoudre le problème.
  • нельзя использовать числовые индексы - $_SESSION [ 1 ], $_SESSION [ '10' ] Comme il peut sembler étrange, mais dans le tableau $_SESSION ne pouvez pas utiliser des codes numériques - $_SESSION [ 1 ], $_SESSION [ '10' ] $_SESSION [ 1 ], $_SESSION [ '10' ] - Sessions liés ne fonctionnera pas.
  • с помощью ini_set () Quelque part entre les versions 4.2 et 5.0, il était impossible de session.use_trans_sid utilisant ini_set () ini_set () . A partir de 5.0, vous pouvez avoir à nouveau.
  • Avant la version 4.3.3, PHP envoie un cookie cookie seulement si au début de l'identificateur de session dans le otsutstvval requête. () Maintenant, le cookie est envoyé chaque fois que vous appelez session_start () session_start ()

    Un exemple d'utilisation de l'authentification des sessions
    Nous illustrons tout exemple vyshenapisannogo petite:
    créer auth.php fichier:
    <?
    if (isset( $_POST [ 'auth_name' ])) {
    $name = mysql_real_escape_string ( $_POST [ 'auth_name' ]);
    $pass = mysql_real_escape_string ( $_POST [ 'auth_pass' ]);
    $query = "SELECT * FROM users WHERE name='$name' AND pass='$pass'" ;
    $res = mysql_query ( $query ) or trigger_error ( mysql_error (). $query );
    if (
    $row = mysql_fetch_assoc ( $res )) {
    session_start ();
    $_SESSION [ 'user_id' ] = $row [ 'id' ];
    $_SESSION [ 'ip' ] = $_SERVER [ 'REMOTE_ADDR' ];
    }
    header ( "Location: http://" . $_SERVER [ 'HTTP_HOST' ]. $_SERVER [ 'REQUEST_URI' ]);
    exit;
    }
    if (isset(
    $_GET [ 'action' ]) AND $_GET [ 'action' ]== "logout" ) {
    session_start ();
    session_destroy ();
    header ( "Location: http://" . $_SERVER [ 'HTTP_HOST' ]. "/" );
    exit;
    }
    if (isset(
    $_REQUEST [ session_name ()])) session_start ();
    if (isset(
    $_SESSION [ 'user_id' ]) AND $_SESSION [ 'ip' ] == $_SERVER [ 'REMOTE_ADDR' ]) return;
    else {
    ?>
    <form method="POST">
    <input type="text" name="auth_name"><br>
    <input type="password" name="auth_pass"><br>
    <input type="submit"><br>
    </form>
    <?
    }
    exit;
    ?>

    Maintenant, il suffit d'écrire des scripts dans toute la ligne protégée
    exigent "auth.php";

    Tout juste sorti de la date, malheureusement, et de nombreux autres articles, qui se trouvent sur l'Internet et n'ont pas été mis à jour depuis des années.

    par phpfaq.ru
  • Publicité
    Développer / Réduire >>> Développer / Réduire la boîte de commentaires

    Commentaires


    Nom: * [Ouvrir]
    MISE À JOUR
    Mail: * [Invisible]
    * Les chiffres:
    3,7 / 5,0 (6)
    • Résultats de la cote de 3.67 / 5
    • Une
    • 2
    • 3
    • 4
    • 5
    Vous avez une idée?

    Comment pouvez-vous revoir?

    OUI
    NO

    Résultats

    J'ai trouvé un bug?

    Système Orphus

    Partager la nouveauté


    Partenaires Nouvelles

    .

    WM-

    Passeport personnel WebMoney