--- TransHandler-ori.pm	2010-06-11 14:54:35.000000000 +0200
+++ TransHandler.pm	2010-06-17 17:08:42.000000000 +0200
@@ -252,27 +252,28 @@
 			       my $response = $ua->request($request);
 			       my $cc = $response->header('Set-Cookie');
 
-			       foreach ($response->headers->header('Set-Cookie')) {
-				       my @list=split(/;/,$_);
-				       my $cook;
-				       foreach (@list) {
-					       if (/([^,; ]+)=([^;]+)/) {
-                                               my $var=$1;
-                                               my $data=$2;
-                                               if (($var =~ /^[Dd][Oo][Mm][Aa][Ii][Nn]/) and ($data =~ /^\./)) { #Si la variable contient domain et que la valeur commence par .
-                                                       $r->hostname =~ /^\w*(.*)/;
-                                                       $cook .= $var."=".$1."; ";
-                                               }
-                                               elsif (($var =~ /^[Dd][Oo][Mm][Aa][Ii][Nn]/) and ($data =~ /^\w\./)) { #Si la variable contient domain et que la valeur commence par un mot
-                                                       $cook .= $var."=".$r->hostname."; ";
-                                               }
-                                               else {
-                                                       $cook .= $var."=".$data."; ";
-                                               }
-                                       }
-				       }
-				       $r->headers_out->add('Set-Cookie' => $cook);
-			       }
+#			       foreach ($response->headers->header('Set-Cookie')) {
+#				       my @list=split(/;/,$_);
+#				       my $cook;
+#				       foreach (@list) {
+#					if (/([^,; ]+)=([^;]+)/) {
+#                                               my $var=$1;
+#                                               my $data=$2;
+#                                               if (($var =~ /^[Dd][Oo][Mm][Aa][Ii][Nn]/) and ($data =~ /^\./)) { #Si la variable contient domain et que la valeur commence par .
+#                                                       $r->hostname =~ /^\w*(.*)/;
+#                                                       $cook .= $var."=".$1."; ";
+#                                               }
+#                                               elsif (($var =~ /^[Dd][Oo][Mm][Aa][Ii][Nn]/) and ($data =~ /^\w\./)) { #Si la variable contient domain et que la valeur commence par un mot
+#                                                       $cook .= $var."=".$r->hostname."; ";
+#                                               }
+#                                               else {
+#                                                       $cook .= $var."=".$data."; ";
+#                                               }
+#                                        }
+#				       }
+# 					$r->headers_out->add('Set-Cookie' => $cook);
+#			       }
+
 			       my %cookies;
 			       while ($cc and $cc =~ s/([^,; ]+)=([^,; ]+)//) {
 				       $cookies{$1} = $2;
@@ -283,6 +284,16 @@
 					       $cookie .= $k . "=". $cookies{$k} . "; ";
 				       }
 			       }
+                                # sauver les couples (nom, valeur) des cookies de l'application
+                                my %cookies_app;
+                                if ($response->headers->header('Set-Cookie')) {
+                                        foreach ($response->headers->header('Set-Cookie')) {    # parcours des lignes Set-Cookie dans le header
+                                               if (/([^,; ]+)=([^,; ]+)/) {                     # filtre du nom du cookie et de sa valeur.
+                                                        $cookies_app{$1} =$2;                   # sauve dans table de hachage.
+							$log->debug("SAVE ".$1."=".$2);
+                                               }
+                                       }
+                                }
 
 
 			       # modification pour prendre en compte l'url relative à l'adresse récupéré depuis un serveur LDAP ou radius. Pour cela, on s'appuie sur l'url de session. On vérifie l'attribut contenant l'url de propagation pour connaître sa forme.
@@ -341,12 +352,19 @@
 #					       }
 #					       $r->headers_out->add('Set-Cookie' => $cook);				       
 #				       }
-				       foreach ($response->headers->header('Set-Cookie')) {
+				        # ajout/remplacement des nouveaux couples (nom, valeur) des cookies suite au retour du POST
+					foreach ($response->headers->header('Set-Cookie')) {
 					       if (/([^,; ]+)=([^,; ]+)/) {
-						       $r->headers_out->add('Set-Cookie' => $1."=".$2."; domain=".$r->hostname."; path=/");
+							$cookies_app{$1} = $2;		# ajout/remplacement
+							$log->debug("ADD/REPLACE ".$1."=".$2);
 					       }
 				       }
 			       }
+                               foreach my $k (keys %cookies_app) {
+                                       	$r->headers_out->add('Set-Cookie' => $k."=".$cookies_app{$k}."; domain=".$r->hostname."; path=/");  # propagation des cookies
+					$log->debug("PROPAG ".$k."=".$cookies_app{$k});
+                               }					
+
 			       if ($response->headers->header('refresh') and $response->headers->header('refresh') =~ /URL=(.*)/) {
 				       $r->headers_out->add('Location' => rewrite_uri($r,$app,$1,$real_post_url,$log));
 			       }

