Oppdatert CookieUtil
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: }
Subscribe to:
Post Comments
(
Atom
)
Benytter generics, generic
ReplyDelete