Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Silverlight 3 : Gestion des cookies

Silverlight propose un espace de stockage privé pour chaque application sur la machine cliente. Cet espace s'appelle l'Isolated Storage (stockage isolé, car protégé et isolé du reste de la machine cliente). C'est dans cet espace qu'il est conseillé de sauvegarder les données propres à l'application (j'y reviendrai dans un prochain billet). Toutefois on peut amené pour certaines informations à préférer le stockage sous la forme de Cookies traditionnels. On peut aussi avoir besoin de lire certains cookies posés par l'éventuelle application hôte en ASP.NET par exemple.

Quelles que soient les raisons, il peut donc s'avérer utile de manipuler les cookies depuis une application Silverlight.

L'application exemple ci-dessous vous permet de tester en live cette fonctionnalité :

[silverlight:source=/SLSamples/Cookies/Cookies.xap;width=380;height=322]

Techniquement, et après avoir ajouté à votre code le using du namespace "System.Windows.Browser", il suffit pour créer (ou modifier) un cookie d'appeler la méthode SetProperty de HtmlPage.Document :

   1:  private bool setCookie(string key, string value)
   2:          {
   3:              if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
   4:              { return false; }
   5:              DateTime dt = calExpiry.SelectedDate ?? DateTime.Now 
   6:                  + new TimeSpan(1, 0, 0);
   7:              string s = key.Trim() + "=" + value.Trim() 
   8:                  + ";expires=" + dt.ToString("R");
   9:              HtmlPage.Document.SetProperty("cookie", s);
  10:              return true;
  11:          }

Pour la lecture on accède à la chaîne "Cookies" de HtmlPage.Document qu'on peut ensuite traiter pour séparer chaque cookie :

   1:  private string getCookie(string key)
   2:          {
   3:              string[] cookies = HtmlPage.Document.Cookies.Split(';');
   4:              foreach (string cookie in cookies)
   5:              {
   6:                  string[] pair = cookie.Split('=');
   7:                  if (pair.Length == 2)
   8:                  {
   9:                      if (pair[0].ToString() == key)
  10:                          return pair[1];
  11:                  }
  12:              }
  13:              return null;
  14:          }

Bref, rien de bien compliqué mais qui pourra vous servir dans certains cas.

Le code source du projet (Blend 3 de préférence, sinon VS 2008 + SL3) : Cookies.zip (62,65 kb)

Stay Tuned !

 

blog comments powered by Disqus