Search code examples
c#asp.netasp.net-mvchttpcookie

ASP.NET MVC Cookie Implementation


I try to implement a basic cookie helper in my application. Mainly I check in base controller everytime whether or not if cookie is set. If cookie

public class MyCookie
{

    public static string CookieName {get;set;}
    public virtual User User { get; set; }
    public virtual Application App { get; set; }


    public MyCookie(Application app)
    {
        CookieName = "MyCookie" + app;
        App = app;
    }

    public void SetCookie(User user)
    {
        HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName] ?? new HttpCookie(CookieName);
        myCookie.Values["UserId"] = user.UserId.ToString();
        myCookie.Values["LastVisit"] = DateTime.Now.ToString();
        myCookie.Expires = DateTime.Now.AddDays(365);
        HttpContext.Current.Response.Cookies.Add(myCookie);
    }

    public HttpCookie GetCookie()
    {
        HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName];
        if(myCookie != null)
        {
            int userId = Convert.ToInt32(myCookie.Values["UserId"]);
            User user = session.Get<User>(userId);
            return user;
        }
        return null;
    }
}

if session is null I try to get from cookie or if session initialize I set cookie but I never see my cookie in browser. What is wrong?

I always start session but with userId=0 To get cookie and set session from cookie:

if (userId == 0)
{
    MyCookie myCookie = new MyCookie(_app);
    User user = cookieHelper.GetCookie();
    if (user != null)
        SessionHelper.SetSession(user);
}

Solution

  • My Working Implementation (Basic Version)

    public class CookieHelper
    {
    
    public static string CookieName {get;set;}
    public virtual Application App { get; set; }
    
    
    public MyCookie(Application app)
    {
        CookieName = "MyCookie" + app;
    }
    
    public static void SetCookie(User user, Community community, int cookieExpireDate = 30)
    {
        HttpCookie myCookie= new HttpCookie(CookieName);
        myCookie["UserId"] = user.UserId.ToString();
        myCookie.Expires = DateTime.Now.AddDays(cookieExpireDate);
        HttpContext.Current.Response.Cookies.Add(myCookie);
     }
     }
    

    if session/cookie is null (actually userid=0)

    if (userId == 0){
        CookieHelper myCookie = new Cookie(_app);
        if (myCookie  != null)
        {
            userId = Convert.ToInt32(System.Web.HttpContext.Current.Request.Cookies[myCookie.CookieName]["userId"]);
            if(userId>0)
            {
               SessionHelper.SetSession(userId);
            }
        }
    }