internal void AddCookie(HttpCookie cookie, bool append)
        {
            _all = null;
            _allKeys = null;

            if (append)
            {
                // mark cookie as new
                cookie.Added = true;
                BaseAdd(cookie.Name, cookie);
            }
            else
            {
                if (BaseGet(cookie.Name) != null)
                {
                    // mark the cookie as changed because we are overriding the existing one
                    cookie.Changed = true;
                }
                BaseSet(cookie.Name, cookie);
            }
        }
        //
        //  Access by name
        //
        /// <devdoc> 
        /// <para>Returns an <see cref="System.Web.HttpCookie"> item from the collection.</see></para>
        /// </devdoc>
        public HttpCookie Get(String name)
        {
            HttpCookie cookie = (HttpCookie)BaseGet(name);

            if (cookie == null && _response != null)
            {
                // response cookies are created on demand
                cookie = new HttpCookie(name);
                AddCookie(cookie, true);
                _response.OnCookieAdd(cookie);
            }

            return cookie;
        }
        /// <devdoc>
        ///    <para> Updates the value of a cookie.</para>
        /// </devdoc>
        public void Set(HttpCookie cookie)
        {
            if (_response != null)
                _response.BeforeCookieCollectionChange();

            AddCookie(cookie, false);

            if (_response != null)
                _response.OnCookieCollectionChange();
        }
        //
        //  Public APIs to add / remove
        //
        /// <devdoc> 
        ///    <para> 
        ///       Adds a cookie to the collection.
        ///    </para> 
        /// </devdoc>
        public void Add(HttpCookie cookie)
        {
            if (_response != null)
                _response.BeforeCookieCollectionChange();

            AddCookie(cookie, true);

            if (_response != null)
                _response.OnCookieAdd(cookie);
        }