Oppdatert CookieUtil

1 comment

Oppdatert cookieutil som tar med brukernavn i cookie, og sletter cookie dersom dette har endret seg, dvs ny bruker har logget på samme maskin.



   1:      /// <summary>

   2:      /// util for å serialize /deserialize objekter til cookies

   3:      /// </summary>

   4:      public static class CookieUtils

   5:      {

   6:   

   7:          /// <summary>

   8:          /// Henter satt cookie som object, returnerer null hvis cookie ikke finnes

   9:          /// </summary>

  10:          /// <param name="navn"></param>

  11:          /// <returns></returns>

  12:          public static T GetCookie<T>(string navn) where T : class, new()

  13:          {

  14:   

  15:              try

  16:              {

  17:   

  18:                  HttpCookie c = HttpContext.Current.Request.Cookies[navn];

  19:                  if (c == null || string.IsNullOrEmpty(c.Value))

  20:                      return default(T);

  21:   

  22:   

  23:                  string[] verdier = c.Value.Split('|');

  24:                  

  25:   

  26:   

  27:                  //fjern cookie hvis den er for en annen bruker

  28:                  string brukerident = verdier[0]; //første==brukerident

  29:                  if (brukerident != Kontroller.HentCurrentUser())

  30:                  {

  31:                      SlettCookie(navn);

  32:                      return default(T);

  33:                  }

  34:                  int n = 1; //start på 1, 0==brukerident...

  35:                  T objekt = new T();

  36:   

  37:                  Type type = objekt.GetType();

  38:                  //Type type = objekt.GetType();

  39:                  FieldInfo[] felter = type.GetFields();

  40:                  foreach (FieldInfo feltinf in felter)

  41:                  {

  42:                      feltinf.SetValue(objekt, verdier[n++]);

  43:                  }

  44:   

  45:                  PropertyInfo[] props = type.GetProperties();

  46:                  foreach (PropertyInfo propinf in props)

  47:                  {

  48:                      SetProperty(propinf, verdier[n++], objekt);

  49:                  }

  50:   

  51:   

  52:   

  53:                  return objekt;

  54:              }

  55:              catch (Exception ex)

  56:              {

  57:                  throw new BasisException(ex);

  58:              }

  59:   

  60:   

  61:          }

  62:          /// <summary>

  63:          /// Lager cookie av gjeldende objekt som utløper om 10 timer

  64:          /// </summary>

  65:          /// <param name="navn"></param>

  66:          /// <param name="objekt"></param>

  67:          public static void SetCookie(string navn, object objekt)

  68:          {

  69:              SetCookie(navn, objekt, DateTime.Now.AddHours(10));

  70:          }

  71:   

  72:          /// <summary>

  73:          /// Lager cookie av gjeldende objekt

  74:          /// </summary>

  75:          /// <param name="navn"></param>

  76:          /// <param name="objekt"></param>

  77:          /// <param name="utløper"></param>

  78:          public static void SetCookie(string navn, object objekt, DateTime utløper)

  79:          {

  80:   

  81:   

  82:              try

  83:              {

  84:   

  85:                  StringBuilder streng = new StringBuilder();

  86:                  streng.Append(Kontroller.HentCurrentUser() + "|");

  87:                  Type type = objekt.GetType();

  88:                  FieldInfo[] felter = type.GetFields();

  89:                  foreach (FieldInfo feltinf in felter)

  90:                  {

  91:                      if (feltinf != null)

  92:                      {

  93:                          object verdi = feltinf.GetValue(objekt);

  94:                          streng.Append(verdi.ToString() + "|");

  95:   

  96:                      }

  97:                  }

  98:   

  99:                  PropertyInfo[] props = type.GetProperties();

 100:                  foreach (PropertyInfo propinf in props)

 101:                  {

 102:                      if (propinf != null)

 103:                      {

 104:                          object verdi = propinf.GetValue(objekt, null);

 105:                          streng.Append(verdi.ToString() + "|");

 106:                      }

 107:                  }

 108:   

 109:                  HttpCookie c = new HttpCookie(navn, streng.ToString());

 110:   

 111:                  c.Expires = utløper;

 112:   

 113:                  if (HttpContext.Current.Request.Cookies[navn] != null)

 114:                      //finnes fra før

 115:                      HttpContext.Current.Response.Cookies.Set(c);

 116:                  else

 117:                      //finnes ikke, lag ny

 118:                      HttpContext.Current.Response.Cookies.Add(c);

 119:   

 120:              }

 121:              catch (Exception ex)

 122:              {

 123:                  throw new BasisException(ex);

 124:              }

 125:          }

 126:   

 127:   

 128:          /// <summary>

 129:          /// sletter en satt cookie 

 130:          /// (resetter verdi og setter utløpsdato tilbake i tid)

 131:          /// </summary>

 132:          /// <param name="navn"></param>

 133:          public static void SlettCookie(string navn)

 134:          {

 135:              //tømmer verdi og setter utløpt for ett år siden

 136:              HttpCookie c = new HttpCookie(navn, "");

 137:              c.Expires = DateTime.Now.AddYears(-1);

 138:   

 139:              if (HttpContext.Current.Request.Cookies[navn] != null)

 140:                  //finnes fra før

 141:                  HttpContext.Current.Response.Cookies.Set(c);

 142:   

 143:          }

 144:   

 145:   

 146:   

 147:   

 148:   

 149:          /// <summary>

 150:          /// Hjelpemetode for å sette en verdi via reflection etc

 151:          /// </summary>

 152:         /// <param name="pInfo"></param>

 153:         /// <param name="propertyValue"></param>

 154:         /// <param name="objectToSetValue"></param>

 155:          private static void SetProperty(PropertyInfo pInfo, string propertyValue, object objectToSetValue)

 156:          {

 157:              Type pType = pInfo.PropertyType;

 158:   

 159:              if (pType == typeof(string))

 160:                  pInfo.SetValue(objectToSetValue, propertyValue, null);

 161:              else if (pType == typeof(bool))

 162:                  pInfo.SetValue(objectToSetValue, Convert.ToBoolean(propertyValue), null);

 163:              else if (pType == typeof(int))

 164:                  pInfo.SetValue(objectToSetValue, Convert.ToInt32(propertyValue), null);

 165:              else

 166:                  throw new NotImplementedException("Objektet har felttype som ikke er implementert enda..");

 167:          }

 168:      }

1 comment :