J3.x

Rétro-compatibilité dans Joomla! 3.4.7

From Joomla! Documentation

This page is a translated version of the page J3.x:Backward Compatibility in Joomla 3.4.7 and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français

Qu'est-ce qui a changé ?

A partir de la version 3.4.7, Joomla! utilise un conteneur de données encodées en base64 pour enregistrer les données de la session au lieu d'une sauvegarde des données en clair dans $_SESSION.

Principalement, Joomla! est passé de :

function set($key, $value, $namespace)
{
  $_SESSION[$namespace][$key] = $value;
}

à

function set($key, $value, $namespace)
{
  $this->data->set($namespace . ‘.’ . $key, $value); 
  $_SESSION[‘joomla’] = base64_encode(serialize($this->data));
}

Pourquoi ce changement ?

Cela était nécessaire pour travailler sur une anomalie critique de PHP qui a été corrigée en septembre 2015. L'anomalie crée plusieurs attaques vectorielles liées aux données en clair enregistrées par l'utilisateur lors d'une session.

Est-ce que mes extensions vont tout de même fonctionner ?

Nous avons 3 scénarios :

Scénario 1 - Vous utilisez déjà JSession : dans ce cas, vous êtes parfaitement en sécurité puisque l'API de JSession n'a pas été modifié. Le codage de session a été mis en œuvre de manière transparente, donc aucune modification de votre code n'est nécessaire.

Scénario 2 - Vous utilisez $_SESSION pour lire ou écrire vos propres données spécifiques à une extension : dans ce cas, votre extension continuera de fonctionner. Le nouveau code ne touche aucune autre donnée de la variable $_SESSION.

Scénario 3 - Vous utilisez $_SESSION pour lire ou écrire des données générales partagées avec Joomla! ou d'autres extensions : dans ce cas, votre extension ne sera plus à même de fonctionner car la structure interne de $_SESSION a été modifiée. Une solution facile est d'utiliser JSession pour remplacer directement les utilisations de $_SESSION.