/// <summary>
        /// Чтение значения контрола из cookies
        /// </summary>
        /// <param name="userControl">Контрол</param>
        /// <param name="key">Ключ (если контролу необходимо хранить несколько значений)</param>
        public string GetValue(UserControl userControl, string key)
        {
            if (userControl == null)
            {
                return(string.Empty);
            }

            lock (locker)
            {
                string     pageName = userControl.Request.Url.AbsolutePath.Replace("/", "_");
                string     keyName  = $"{userControl.ClientID.ToMd5()}_{key}";
                HttpCookie cookie   = userControl.Request.Cookies[pageName];

                CookiedControlsGroup groupValue = (string.IsNullOrEmpty(cookie?.Value))
                    ? new CookiedControlsGroup()
                    : JsonConvert.DeserializeObject <CookiedControlsGroup>(
                    CompressionHelper.Unzip(System.Convert.FromBase64String(cookie?.Value)));

                if (groupValue.KeyValues.ContainsKey(keyName))
                {
                    return(groupValue.KeyValues.FirstOrDefault(i => i.Key == keyName).Value);
                }
            }

            return(string.Empty);
        }
        /// <summary>
        /// Сохранение значения контрола в cookies
        /// </summary>
        /// <param name="userControl">Контрол</param>
        /// <param name="key">Ключ (если контролу необходимо хранить несколько значений)</param>
        /// <param name="value">Значение, которое необходимо сохранить</param>
        public void SaveValue(UserControl userControl, string key, string value)
        {
            if (userControl == null)
            {
                return;
            }

            lock (locker)
            {
                string pageName      = userControl.Request.Url.AbsolutePath.Replace("/", "_");
                string keyName       = $"{userControl.ClientID.ToMd5()}_{key}";
                string cookieContent = GetCachedItem(userControl);

                CookiedControlsGroup groupValue = (string.IsNullOrEmpty(cookieContent))
                    ? new CookiedControlsGroup()
                    : JsonConvert.DeserializeObject <CookiedControlsGroup>(cookieContent);

                if (!string.IsNullOrEmpty(value))
                {
                    if (!groupValue.KeyValues.ContainsKey(keyName))
                    {
                        groupValue.KeyValues.Add(keyName, value);
                    }
                    else
                    {
                        groupValue.KeyValues[keyName] = value;
                    }
                }
                else
                {
                    if (groupValue.KeyValues.ContainsKey(keyName))
                    {
                        groupValue.KeyValues.Remove(keyName);
                    }
                }

                HttpCookie cookie = new HttpCookie(pageName,
                                                   System.Convert.ToBase64String(CompressionHelper.Zip(JsonConvert.SerializeObject(groupValue))))
                {
                    Expires = DateTime.Now.AddDays(30 * (groupValue.HasData ? 1 : -1))
                };

                HttpContext.Current.Items[pageName] = JsonConvert.SerializeObject(groupValue);

                if (userControl.Response.Cookies[pageName] == null)
                {
                    userControl.Response.Cookies.Add(cookie);
                }
                else
                {
                    userControl.Response.Cookies.Set(cookie);
                }
            }
        }