/// <summary>
        ///
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        internal static BaseSessionObject GetSessionObject(User user)
        {
            BaseSessionObject sessionObject = CreateSessionObject();

            sessionObject.Init(user);
            var context = HttpContextUtilities.GetHttpContext();

            SaveSessionObjectToHttpContext(sessionObject, context);
            return(sessionObject);
        }
        /// <summary>
        /// Create a session object for specific user account
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        internal static BaseSessionObject GetSessionObject(string username, string password)
        {
            BaseSessionObject sessionObject = CreateSessionObject();

            sessionObject.Init(username, password);
            var context = HttpContextUtilities.GetHttpContext();

            SaveSessionObjectToHttpContext(sessionObject, context);
            return(sessionObject);
        }
        public SessionDataLoadingResult Load()
        {
            var context = HttpContextUtilities.GetHttpContext();

            if (context != null)
            {
                return(LoadSessionObjectDataFromCookie(context));
            }
            return(LoadSessionObjectDataFromAssemblyIsolatedStorage());
        }
        public void Remove()
        {
            var context = HttpContextUtilities.GetHttpContext();

            if (context != null)
            {
                RemoveSessionObjectDataFromCookie(context);
                return;
            }
            RemoveSessionObjectDataFromAssemblyIsolatedStorage();
        }
        public void Save(SessionData data)
        {
            var context = HttpContextUtilities.GetHttpContext();

            if (context != null)
            {
                SaveSessionObjectDataToCookie(data, context);
                return;
            }

            SaveSessionObjectDataToAssemblyIsolatedStorage(data);
        }
        /// <summary>
        /// Create a session object by configuration
        /// </summary>
        /// <returns></returns>
        public static BaseSessionObject GetSessionObject()
        {
            var context = HttpContextUtilities.GetHttpContext();

            var sessionObject = GetSessionObjectFromHttpContext(context);

            if (sessionObject != null)
            {
                return(sessionObject);
            }

            sessionObject = CreateSessionObject();
            sessionObject.Init();

            if (!sessionObject.UserId.Equals(Guid.Empty))
            {
                SaveSessionObjectToHttpContext(sessionObject, context);
                return(sessionObject);
            }

            return(sessionObject);
        }