Puis-je configurer une session dans la page personnalisée WordPress

Publié par Jean-Michel le

J’essaie de configurer un système de connexion et un formulaire de contact pour les utilisateurs finaux Fornt de mon thème WP personnalisé. Je dois créer une méthode Ajax Post et envoyer les valeurs d’entrée au serveur telles que Captcha et les valeurs d’entrée utilisateur telles que captcha, nom, téléphone, e-mail, … Maintenant, ma question est la suivante: dois-je créer une session PHP pour sécuriser la soumission de formulaire indésirable ou en passant la valeur captcha entre deux pages ?

si oui, est-ce un modèle de page correct pour une page de contact et une page captcha

<?php
session_start();
/*
 Template Name: Contact Page
*/

le captcha.php

<?php
session_start();

Merci

Solution n°1 trouvée

Oui, vous pouvez, mais vous obtiendrez des erreurs concernant l’en-tête déjà envoyé, sauf si vous vous connectez à init ou admin_init (ou ailleurs avant l’envoi des en-têtes). Je ne l’ai pas testé, mais vous pourrez peut-être connecter votre fonction de session à l’ send_headersaction1 qui semble être l’endroit le plus approprié puisque la session envoie finalement des en-têtes.

Sur une page de modèle, je pense que cela fonctionnera si vous démarrez la session avant d’appeler get_header().

Voici un exemple d’un plugin que j’ai précédemment construit.

Mise en place de la séance :

// Must run session_start() during admin_init to use $_SESSION variables later
add_action('admin_init','register_session');

function register_session() {
      if( !session_id()
        && current_user_can( 'manage_options' )
        && current_user_can( 'client_tools' )  )
      session_start();
      session_unset();
}

Cela fait partie d’une fonction utilisée pour définir les variables de session là où j’en avais besoin.

// Update notifications
add_action( 'admin_post_mmc_update_notification', 'mmc_update_notification' );

function mmc_update_notification() {
        //Check the nonce
        check_admin_referer( 'mmc_notification_nonce' );

        // Set a session variable
        if ( isset( $_POST[ 'client-manager-lname' ] ) )
            $_SESSION['client-manager-lname'] = $_POST['client-manager-lname'];

}

Cela m’a permis d’utiliser ces variables de session sur une page de sous-menu pour ce plugin comme ceci :

//Define variables to be used in search results. Make sure each is set first.
if( isset($_SESSION['client-manager-lname'])
&& $_SESSION['client-manager-lname'] != '' ) {
$last_name = $_SESSION['client-manager-lname'];
}

Vous pouvez désactiver les variables de session à la fin du script lorsqu’elles ne sont plus nécessaires avec unset ($_SESSION['varname']);. Toutes les variables de session peuvent être désactivées, session_unset();ce qui est une bonne idée de s’exécuter juste après le démarrage d’une session si vous devez vous assurer que vous définissez de nouvelles variables pour chaque session sans restes des sessions précédentes.

Détruire la session avec session_destroy();.

Je recommande de lire PHP : session_unset – Manual.


Mise à jour : j’ai examiné de plus près pourquoi vous envisagez d’utiliser des sessions PHP et j’ai vu la réponse d’Hybrid Web Dev. Il existe une option pour mémoriser les informations d’identification lorsque votre utilisateur est connecté (authentifié) via wp_signon()2.

Comme indiqué, utilisez toujours un wp_nonce_field()3 dans vos formulaires et vérifiez-le avec wp_verify_nonce()4 dans votre script de gestion de formulaire.

Je viens de tomber sur un bon article concernant les cookies et les sessions PHP dans WordPress avec un aperçu de certains problèmes liés au cache et à la sécurité en s’appuyant sur les variables $_SESSION. Autres choses Archives – WP Engine

Dans l’ensemble, il semble préférable d’éviter autant que possible les sessions PHP dans WordPress. Dans certains cas, il peut être idéal de stocker des données temporaires via l’API Transient5.

Solution n°2 trouvée

Les sessions sont essentiellement utiles pour que les données persistent entre les pages.

Si vous utilisez des appels ajax, vous ne devriez pas du tout avoir besoin de sessions, car vous pouvez facilement transmettre des données d’analyse/transmission à la volée, y compris d’autres modèles/fichiers. Sur cette note, WP a un système de gestion ajax intégré. Si vous ne le connaissez pas, je vous suggère de vérifier le codex WP.

En ce qui concerne la sécurisation des soumissions indésirables, vous devez absolument TOUJOURS utiliser des nonces, en PLUS de valider et de nettoyer/vérifier CHAQUE élément d’entrée de l’utilisateur. L’utilisation d’une approche de liste blanche ou de liste noire pour la validation vous évitera beaucoup de maux de tête et vous facilitera généralement la vie.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *