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