C# -> Cookies og Static metoder, i xslt extensions
Hej Eksperter.Jeg er ved at lave en shop, og har i ro og mag lokalt været overud lykkelig over det hele har fungeret, meeeen når vi så er flere på løsningen komemr der problemer.
De data jeg troede jeg gemte i en lokal cookie, bliver spredt rundt på de brugere der er på sitet, altså en fejl jeg ikke opdagede da jeg testede alene.
Min UserInfo.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
namespace SparShop.Utilities
{
class ShopUser
{
public Dictionary<string, string> UserInfo = new Dictionary<string, string>();
public ShopUser() {
HttpCookie cookie = new HttpCookie("Spar_Shop_User");
cookie = HttpContext.Current.Request.Cookies["Spar_Shop_User"];
if (cookie != null)
UserInfo = (Dictionary<string, string>)Utilities.SerializationHelper.DeserializeObjectFromBase64StringWithCompression(cookie.Value.Replace("Spar_Shop_User=", ""));
}
public void AddUserInfo(string key, string value)
{
if (String.IsNullOrEmpty(key))
{
HttpContext.Current.Trace.Warn("Userinfo", "No item found with key");
return;
}
if (String.IsNullOrEmpty(value))
{
UserInfo.Remove(key);
HttpContext.Current.Trace.Warn("Userinfo", "Deleting:" + key);
SaveToCookie();
return;
}
if (UserInfo.ContainsKey(key))
{
UserInfo.Remove(key);
UserInfo.Add(key, value);
HttpContext.Current.Trace.Warn("Userinfo", "Updated:" + key + " To:" + value);
}else
{
UserInfo.Add(key, value);
HttpContext.Current.Trace.Warn("Userinfo", "Added:" + key + " value:" + value);
}
SaveToCookie();
}
public string GetUserInfo(string key)
{
if (UserInfo.ContainsKey(key))
{
HttpContext.Current.Trace.Warn("Userinfo", "Get:" + key + " value:" + UserInfo[key].ToString());
return UserInfo[key].ToString();
}
return null;
}
/// <summary>
/// Save object to cookie
/// </summary>
public void SaveToCookie()
{
HttpCookie cookie = new HttpCookie("Spar_Shop_User");
cookie.Expires = DateTime.Now.AddDays(100);
cookie["Spar_Shop_User"] = Utilities.SerializationHelper.SerializeObjectToBase64StringWithCompression(UserInfo);
HttpContext.Current.Response.Cookies.Add(cookie);
}
}
}
Jeg har så en enkelt .cs fil jeg benytter til at lave mine xslt extensions:
public static void AddUserInfo(string key, string value)
{
Utilities.ShopUser u = new Utilities.ShopUser();
u.AddUserInfo(key, value);
}
public static string GetUserInfo(string key)
{
Utilities.ShopUser u = new Utilities.ShopUser();
return u.GetUserInfo(key);
}
#endregion
Altså hvis bruger A indtaster noget til AddUserInfo, bliver det samme resultat for bruger A og B vha GetUserInfo.
Why ?
På forhånd tak
Jacob