Изменяется ли SessionId, вызывая эту ошибку. Ошибка проверки Viewstate. Причина: предоставленное состоянием просмотра не удалось выполнить проверку целостности.

Я создал сайт, работающий на двух серверах с балансировкой нагрузки (веб-ферма), через некоторое время мне пришлось сделать следующее:

на странице входа, когда пользователь вводит имя пользователя и пароль, если пользователь действителен, я отказываюсь от сеанса и создаю новый следующим образом:

protected void btnLogin_Click(object sender, EventArgs e)
        {
            var Token = Guid.Empty;
            try
            {
                if (IsValidCaptcha())
                {
                    string email = txtEmail.Text.Trim();
                    string pw = txtPassword.Text.Trim();                      

                    AbandonSession();//Delete any existing sessions
                    var newSessionId = CreateSessionId(HttpContext.Current); //Create a new SessionId
                    SetSessionId(HttpContext.Current, newSessionId);

                    Token = SecureLogin.Login(email, pw, LangCode);

                }
                else
                {
                    lblMsg.Style.Add("display", "block");
                }
            }
            catch (Exception)
            {
                Token = Guid.Empty;
                lblMsg.Style.Add("display", "block");
            }

            if (Token != Guid.Empty)
            {
                Response.Redirect($"HiddenPage.aspx?token={Token.ToString()}", false);
            }
            else
            {
                lblMsg.Style.Add("display", "block");
            }

        }


protected void AbandonSession()
        {
            Session.Clear();
            Session.Abandon();
            Session.RemoveAll();
            if (Request.Cookies["ASP.NET_SessionId"] != null)
            {
                Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
                Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20);
            }
            if (Request.Cookies["__AntiXsrfToken"] != null)
            {
                Response.Cookies["__AntiXsrfToken"].Value = string.Empty;
                Response.Cookies["__AntiXsrfToken"].Expires = DateTime.Now.AddMonths(-20);
            }
        }

        private string CreateSessionId(HttpContext httpContext)
        {
            var manager = new SessionIDManager();

            string newSessionId = manager.CreateSessionID(httpContext);

            return newSessionId;
        }

        public void SetSessionId(HttpContext httpContext, string newSessionId)
        {
            try
            {
                var manager = new SessionIDManager();

                manager.SaveSessionID(httpContext, newSessionId, out bool redirected, out bool cookieAdded);
            }
            catch(Exception ex)
            {
                SmtpMailer.SendMsg(ex.Message + ex.StackTrace + ex.InnerException, "", "");
            }

        }

Это одно из требований к сайту и я никак не могу его изменить (смена сеанса после авторизации на сайте).

после применения этого подхода я начал получать эту ошибку почти на каждой странице сайта (время от времени).

Event code: 4009  
        Event message: Viewstate verification failed. 
        Reason: The viewstate supplied failed integrity check.  
        Event time: 1/22/2019 2:53:36 PM  
        Event time (UTC): 1/22/2019 7:53:36 PM  
        Event ID: 5ffacfa116224c9f8f516ead8a89cc55  
        Event sequence: 378  
        Event occurrence: 1  
        Event detail code: 50203    
        Application information: 
        Application domain: /LM/W3SVC/2/ROOT-1-131926597583461452 
        Trust level: Full 
        Application Virtual Path: / 
        Application Path: ........... 
        Machine name: ..............    Process information: 
        Process ID: 6624 
        Process name: w3wp.exe 
        Account name: IIS APPPOOL\..............    Request information: 
        Request URL: ............../qConsole/CampaignGroup-Launch.aspx
        Request path: /qConsole/CampaignGroup-Launch.aspx 
        User host address: .............. 
        User:  
        Is authenticated: False 
        Authentication Type:  
        Thread account name: IIS APPPOOL\..............

Я дважды проверил (а) ключ машины/ключ дешифрования одинаков на обоих серверах при балансировке нагрузки и (б) что они не настроены на автоматическую генерацию

а также я добавил этот код в Global.asax

protected void Session_Start(object sender, EventArgs e)
        {
            Session.Timeout = 60;
        }

и у меня есть этот набор в файле web.config

<sessionState timeout="25" />

У меня такое ощущение, что проблема, с которой я столкнулся, связана с добавленной мной функцией (создание нового идентификатора сеанса после страницы входа в систему), любые идеи или мысли действительно ценятся.

Обновлять:

я пробовал это, и это не решило вообще

Проверка состояния просмотра не удалась. Причина: предоставленное состояние просмотра не удалось выполнить проверку целостности.

Спасибо.


person B.Simboliq    schedule 23.01.2019    source источник
comment
Рассмотрите возможность настройки mcve (минимально воспроизводимый пример). Создайте минимальное шаблонное приложение и добавьте минимум кода, чтобы воспроизвести проблему.   -  person Henk Holterman    schedule 24.01.2019
comment
Прочитайте мои комментарии еще раз. Я предсказываю, что вы не получите много помощи таким образом. Пришло время для нового подхода.   -  person Henk Holterman    schedule 24.01.2019
comment
Пожалуйста, покажите нам содержимое вашего файла web.config.   -  person mjwills    schedule 24.01.2019
comment
Вам действительно нужно ViewState? Насколько сложно было бы изменить ваше приложение, чтобы оно не требовалось?   -  person mjwills    schedule 24.01.2019
comment
@mjwills я никогда не использовал его! как я уже сказал, у меня недавно была эта проблема, но за последние 3 года я никогда не сталкивался с этой проблемой, пока не изменил подход к входу в систему.   -  person B.Simboliq    schedule 24.01.2019
comment
Написание формы .aspx без ViewState довольно сложно, если вообще возможно. Это основа WebForms.   -  person Henk Holterman    schedule 25.01.2019