diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php
index 63c340eb405702104ec0ee0ca6018bff9b96294d..b07343115db04f8d39483b5c12748ea49d3f7bc6 100644
--- a/ecrire/balise/formulaire_forum.php
+++ b/ecrire/balise/formulaire_forum.php
@@ -103,21 +103,6 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
 			$email_auteur = $GLOBALS['auteur_session']['email'];
 		}
 	}
-	// Tableau des valeurs servant au calcul d'une signature de securite.
-	// Elles seront placees en Input Hidden pour que inc/forum_insert
-	// recalcule la meme chose et verifie l'identite des resultats.
-	// Donc ne pas changer la valeur de ce tableau entre le calcul de
-	// la signature et la fabrication des Hidden
-	// Faire attention aussi a 0 != ''
-
-	// id_rubrique est parfois passee pour les articles, on n'en veut pas
-	$ids = array();
-	if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
-		$id_rubrique = 0;
-	foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
-		$ids[$o] = ($x = intval($$o)) ? $x : '';
-	}
-
 
 	// ne pas mettre '', sinon le squelette n'affichera rien.
 	$previsu = ' ';
@@ -161,10 +146,8 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
 		if ($afficher_texte != 'non') 
 			$previsu = inclure_previsu($texte, $titre, $email_auteur, $auteur, $url_site, $nom_site_forum, $ajouter_mot);
 
-		$alea = forum_fichier_tmp();
 
-		include_spip('inc/actions');
-		$hash = calculer_action_auteur('ajout_forum'.join(' ', $ids).' '.$alea);
+		$alea = forum_fichier_tmp();
 
 		// Poser un cookie pour ne pas retaper les infos invariables
 		include_spip('inc/cookie');
@@ -173,10 +156,32 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
 				'email' => $email_auteur)));
 	}
 
-	// pour la chaine de hidden
-	$script_hidden = $script = str_replace('&', '&', $script);
-	foreach ($ids as $id => $v)
-		$script_hidden = parametre_url($script_hidden, $id, $v, '&');
+
+	// Valeurs servant au calcul d'une signature de securite.
+	// Elles seront placees en Input Hidden pour que inc/forum_insert
+	// recalcule la meme chose et verifie l'identite des resultats.
+	// Ne pas changer ces valeurs entre le calcul de la signature
+	// et leur insertion en hidden.
+	// Faire attention aussi a 0 != ''
+
+	// id_rubrique est parfois passee pour les articles, on n'en veut pas
+
+	if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
+		$id_rubrique = 0;
+
+	$arg = intval($id_article) .'/'. .
+	  intval($id_breve) . '/' .
+	  intval($id_forum) . '/' .
+	  intval($id_rubrique) . '/' .
+	  intval($id_syndic) . '/' .
+	  $alea;
+
+	include_spip('inc/actions');
+	$hash = calculer_action_auteur("ajout_forum-$arg");
+
+	$script = str_replace('&', '&', $script);
+	$script_hidden = parametre_url($script, 'arg', $arg, '&');
+	$script_hidden = parametre_url($script_hidden, 'action', 'ajout_forum, '&');
 
 	return array('formulaires/formulaire_forum', 0,
 	array(
diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php
index f8b6d355971280a3b89fb7a032c592daae163f08..54b0bb4e3bf630a63ebad9c2a1d68471ab9410da 100644
--- a/ecrire/inc/forum_insert.php
+++ b/ecrire/inc/forum_insert.php
@@ -113,24 +113,12 @@ function mots_du_forum($ajouter_mot, $id_message)
 		  spip_abstract_insert('spip_mots_forum', '(id_mot, id_forum)', "($id_mot, $id_message)");
 }
 
-// Recalcule la signature faite dans formulaires/inc-formulaire-forum
-// en fonction des input POST (ne pas se fier aux parametres d'URL)
+
 // Retourne le fichier verrouillant si correct
 
 // http://doc.spip.org/@forum_insert_secure
-function forum_insert_secure($alea, $hash)
+function forum_insert_secure($arg, $hash)
 {
-	$ids = array();
-
-	foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
-		$ids[$o] = ($x = intval($_POST[$o])) ? $x : '';
-	}
-
-	if (!verifier_action_auteur('ajout_forum'.join(' ', $ids).' '.$alea,
-		$hash)) {
-		spip_log('erreur hash forum');
-		die (_T('forum_titre_erreur')); 	# echec du POST
-	}
 
 	$file = _DIR_TMP ."forum_" . preg_replace('/[^0-9]/', '', $alea) .".lck";
 	return  file_exists($file) ? $file : '';
@@ -204,7 +192,10 @@ function inc_forum_insert_dist() {
 
 	// Verifier hash securite pour les forums avec previsu
 	if ($afficher_texte <> 'non') {
-		$file = forum_insert_secure(_request('alea'), _request('hash'));
+	        $var_f = charger_fonction('controler_action_auteur', 'inc');
+        	$var_f();
+
+		$file = forum_insert_secure(_request('arg'), _request('hash'));
 		if (!$file) {
 			# ne pas tracer cette erreur, peut etre due a un double POST
 			# tracer_erreur_forum('session absente');
diff --git a/ecrire/index.php b/ecrire/index.php
index 8097b2ba490dbfe876d91da07b867db2e29bf589..5ed6d781c23b6df520f3580aa125d12c779b8b57 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -84,7 +84,10 @@ if (autoriser_sans_cookie($exec)) {
 } else {
 	$var_auth = charger_fonction('auth', 'inc');
 	$var_auth = $var_auth();
-	if ($var_auth) redirige_par_entete($var_auth);
+	if ($var_auth) {
+		include_spip('inc/headers');
+		redirige_par_entete($var_auth);
+	}
  }
 
 //