Когда пользователь попадает на сайт, отображается страница с пользовательской ошибкой. Зачем? Это мало кому и спорадически - PullRequest
0 голосов
/ 17 декабря 2009

Может кто-нибудь помочь мне? Мы разрабатываем приложение asp.net с использованием фреймворка asp.net 2.0. Вопрос носит спорадический характер. Как только конкретный пользователь попадает на сайт в производственном процессе, появляется пользовательская страница с ошибкой. Мне сказали, что этот пользователь может успешно войти несколько раз, и после некоторого простоя он получает эту страницу с ошибкой. Мы даже еще не зашли на сайт. Как только я захожу на сайт. Пример: - www.Mywebsite.com, пользовательская ошибка отображается. Может ли кто-нибудь помочь мне в этом. Еще одна вещь, которую я имею на своем локальном компьютере .NET 3.5 с пакетом обновления 1 установлен и в производстве только после того, как сервер установлен пакет обновления. Может ли это быть причиной проблемы? иногда это показывает страницу и некоторые пользовательские ошибки. Они даже не посетили экран входа в систему. Как только некоторые пользователи заходят на сайт, они видят страницу с ошибкой клиента, а не страницу входа. Как я уже сказал, это происходит, когда пользователь заходит на сайт, я начал проверять свой загрузочный код index.aspx (страница, настроенная в документах виртуальных каталогов как стартовая страница), и это код, который я использую.

Моя каждая страница .aspx наследует класс PageBase, который имеет переопределенный метод ниже и с кодом ниже. Если вы внимательно посмотрите, срок действия "langCookie" составляет 30 минут. Будет ли это проблемой? Ниже приведен небольшой код моего PageBase и моего index.aspx. Я не уверен, что делает пользователь. Я слышал, что это происходит спорадически, поэтому стало трудно воспроизводить. Еще одна вещь, поскольку это сочетание страниц asp и aspx, которые я использовал ниже в web.config. В противном случае я получаю символы sqaure на классических страницах asp, когда открываю их.

PageBase.cs Код: -

protected override void InitializeCulture()
    {
        base.InitializeCulture();


        HttpCookie langCookie = null;

        if (null == Request.Cookies[SESSION_KEY_LANGUAGE])
        {
            foreach (string s in Request.Cookies)
            {
                if (HttpUtility.UrlDecode(Request.Cookies[s].Name) == SESSION_KEY_LANGUAGE)
                {
                    langCookie = new HttpCookie(SESSION_KEY_LANGUAGE);
                    langCookie.Value = HttpUtility.UrlDecode(Request.Cookies[s].Value);                         langCookie.Expires = DateTime.Now.AddMinutes(30.0);
                    Response.Cookies.Add(langCookie);
                    break;
                }
            }
        }
        else
        {
            langCookie = Request.Cookies[SESSION_KEY_LANGUAGE];
        }

        if (null != langCookie)
        {
            if (langCookie.Value != "")
            {
                CultureInfo cultureInfo = new CultureInfo(langCookie.Value);
                ApplyNewLanguage(cultureInfo);
            }
        }
    }   

index.aspx.cs: - Начальная страница в виртуальной среде установлена ​​как index.aspx

protected void Page_Load(object sender, EventArgs e)
{
        //Set sign button as default button for login (press enter)
        Page.Form.DefaultButton = "ButtonSignIn";

        //Get Cookie Language
        if (null == Request.Cookies[SESSION_KEY_LANGUAGE])
        {
            cookie = new HttpCookie(SESSION_KEY_LANGUAGE);
        }
        else
        {
            cookie = Request.Cookies[SESSION_KEY_LANGUAGE];
        }


        if (null == Request.Cookies[SESSION_KEY_LANGUAGE_FORASP])
        {
            cookieASP = new HttpCookie(SESSION_KEY_LANGUAGE_FORASP);
        }
        else
        {
            cookieASP = Request.Cookies[SESSION_KEY_LANGUAGE_FORASP];
        }

        if (!IsPostBack)
        {
            //check if chkbtaccess cookies exists
            if (null != Request.Cookies[CHECKACCESS])
            {

                HttpCookie cookieCheckAccess = Request.Cookies[CHECKACCESS];
                string strCKBTC = DecryptUsernamePass(cookieCheckAccess.Value.ToString());

                if (String.Compare(strCKBTC, string.Empty) != 0)
                {
                    string[] aryCKBTC = strCKBTC.Split(Convert.ToChar(","));
                    TextBoxUsername.Text = aryCKBTC[0];
                    TextBoxPassword.Text = aryCKBTC[1];
                    CheckBoxRememberMe.Checked = true;
                }
}

private string DecryptUsernamePassword(string strText)
    {
        string strDecryptedUsernamePassword = string.Empty;
        strDecryptedUsernamePassword = CommonUtil.EncryptDecryptHelper.Decrypt(HttpUtility.UrlDecode(strText, Encoding.Default));
        //strDecryptedUsernamePassword = CommonUtil.EncryptDecryptHelper.Decrypt(HttpUtility.UrlDecode(strText, Encoding.Unicode));

        return strDecryptedUsernamePassword;
    }


private string EncryptUsernamePassword(string strText)
    {
        string strEncryptedUsernamePassword = string.Empty;             
        strEncryptedUsernamePassword = HttpUtility.UrlEncode(CommonUtil.EncryptDecryptHelper.Encrypt(strText), Encoding.Default);
        //strEncryptedUsernamePassword = HttpUtility.UrlEncode(CommonUtil.EncryptDecryptHelper.Encrypt(strText), Encoding.Unicode);

        return strEncryptedUsernamePassword;
    }

1 Ответ

0 голосов
/ 17 декабря 2009

В качестве отправной точки вы должны добавить в этот код некоторую регистрацию и обработку исключений, чтобы вы могли сузить круг возможных ошибок. Это также сделает ваш код более устойчивым и терпимым к недопустимым значениям cookie.

Простой способ сделать это - реализовать обработчик ошибок в Global.asax:

protected void Application_Error(Object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
}

Это должно дать вам произошедшее исключение, которое вы можете затем изучить (например, в отладчике, записать его в файл и т. Д.), Чтобы узнать, что является причиной ошибки.

Для временной меры вы можете отключить пользовательские ошибки в web.config:

<customErrors mode="Off"/>

Это позволит вам видеть исключение в вашем веб-браузере, когда оно возникает. Я не рекомендовал бы использовать этот параметр на живом сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...