Идентификатор сеанса изменился с момента установки VS2010SP1 / IE10 Preview

#asp.net #sessionid #visual-studio-2010

#asp.net #идентификатор сеанса #visual-studio-2010

Вопрос:

У меня есть веб-приложение, в котором могут быть установлены дополнения. Для создания этих дополнений я создаю новое веб-приложение с той же структурой и ссылаюсь на сборку из основного приложения.

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

Все это работало нормально вплоть до того момента, когда я вносил поправки, единственное, что изменилось с тех пор, как я работал над этим в последний раз, — это установка VS2010 SP1.

Теперь в коде есть точка — я не могу точно видеть, где это происходит, поскольку это внешний код, но идентификатор сеанса меняется, и я теряю все в сеансе.

У меня есть фрагмент кода для открытия нового окна с отчетом:

         string link = String.Format( "window.open('{0}');", Page.ResolveUrl( "~/CustomPages/BudgetOnlineMedia.aspx" ) );

        Page.ClientScript.RegisterStartupScript( this.GetType(), "MedReport", link, true );
  

после этого на базовой странице будет достигнута точка останова:

 /// <summary>
/// OnPreload
/// </summary>
/// <param name="e">args</param>
[VersionChange( "7.3.88.272", "13/04/2011", "Fully qualified path to login page" )]
protected override void OnPreLoad( EventArgs e )
{
    try
    {
        base.OnPreLoad( e );

        if ( base.CurrentUser == null )
        {
            Response.Redirect( "~/Pages/Login.aspx", false );
        }
    }
    catch ( Exception ex )
    {
        ErrorLogging.LogError( ex );
    }
}
  

Снова возникает та же точка останова, но на этот раз изменился идентификатор сеанса!

На данный момент я могу прочитать callstack, но в моем коде нет ничего, что могло бы изменить сеанс.

Трассировка стека выглядит следующим образом:

 >   Web.WAP.Objects.DLL!Web.WAP.Objects.Controls.UserPresencePage.OnPreLoad(System.EventArgs e) Line 28 C#
    System.Web.dll!System.Web.UI.Page.ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)   0x22b bytes   
    System.Web.dll!System.Web.UI.Page.ProcessRequest(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)   0x84 bytes    
    System.Web.dll!System.Web.UI.Page.ProcessRequest()   0x51 bytes 
    System.Web.dll!System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext context)   0x16 bytes   
    System.Web.dll!System.Web.UI.Page.ProcessRequest(System.Web.HttpContext context)   0x32 bytes   
    App_Web_-ti4sydr.dll!ASP.custompages_budgetexhibition_aspx.ProcessRequest(System.Web.HttpContext context)   0x33 bytes  C#
    System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   0xb6 bytes 
    System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step, ref bool completedSynchronously)   0x4c bytes 
    System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception error)   0x133 bytes  
    System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object extraData)   0x7c bytes  
    System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr)   0x17c bytes 
    System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr)   0x63 bytes  
    System.Web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest wr)   0x47 bytes  
    WebDev.WebHost20.dll!Microsoft.VisualStudio.WebHost.Request.Process()   0x177 bytes 
    WebDev.WebHost20.dll!Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Microsoft.VisualStudio.WebHost.Connection conn)   0x6c bytes    
    [Appdomain Transition]  
    WebDev.WebHost20.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(object acceptedSocket)   0xd3 bytes   
    mscorlib.dll!System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(object state)   0x2f bytes   
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)   0x6f bytes    
    mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(System.Threading._ThreadPoolWaitCallback tpWaitCallBack)   0x53 bytes 
    mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(object state)   0x59 bytes    
  

Что такое [Переход домена приложения]?

Видите ли вы что-нибудь, что могло бы привести к изменению идентификатора сеанса!?

Редактировать:

хорошо, это может быть связано не с VS SP1, а с IE10 preview.

Теперь, когда я создаю окно.showModalDialog, затем из этого диалогового окна.откройте. Internet Explorer создает новый сеанс

Ответ №1:

хорошо, это может быть связано не с VS SP1, а с IE10 preview.

Теперь, когда я создаю окно.showModalDialog, затем из этого диалогового окна.откройте. Internet Explorer создает новый сеанс

Казалось, что это ошибка в IE8, но, похоже, она может вернуться в IE10.

Это обходной путь, который мне пришлось использовать.

на моей базовой странице для отображения модального диалога (который передает объект window)

 /// <summary>
/// Shows a Page as a Modal dialog
/// </summary>
/// <param name="URL">The URL</param>
/// <param name="Width">The Width</param>
/// <param name="Height">The Height</param>
/// <param name="Resizable">Resizable?</param>
/// <param name="IfScript">Java script to run if the window returns true</param>
/// <param name="ElseScript">Java script to run if the window returns false</param>
protected void ShowModalDialog( string URL, int Width, int Height, bool Resizable, string IfScript, string ElseScript )
{
    try
    {
        string sModalDialog = @"
                                try
                                {{
                                    var args = new Object();
                                    args.window = window;
                                    if (window.showModalDialog('{0}', args, 'dialogHeight={1}px;dialogWidth={2}px;resizable={3}'))
                                    {{
                                        {4}
                                    }}
                                    else
                                    {{
                                        {5}
                                    }}
                                }}
                                catch (e)
                                {{
                                    alert(e.value);
                                }}";

        string vbs = String.Format( sModalDialog, URL, Height, Width, Resizable ? "yes" : "no", IfScript, ElseScript );

        base.ClientScript.RegisterStartupScript( this.GetType(), "ModalDialog", vbs, true );
    }
    catch ( Exception )
    {
        throw;
    }
}
  

И метод базовой страницы для открытия всплывающего окна (который проверяет наличие переданного объекта window)

        /// <summary>
    /// Shows a Popup Window
    /// </summary>
    /// <param name="Link">The link to show in the window</param>
    /// <param name="Width">The Width of the window</param>
    /// <param name="Height">The Height of the window</param>
    /// <param name="Name">The name of the window</param>
    /// <param name="ScrollBars">The Scroll bars to show</param>
    /// <param name="Resizable">Whether the window is resizable</param>
    /// <param name="ShowToolBar">Whether to show the toolbar</param>
    /// <param name="ShowStatusBar">Whether to show the status bar</param>
    /// <param name="ShowAddressBar">Whether to show the address bar</param>
    protected void OpenWindow( string Link, int Width, int Height, string Name, Sicon.API.Web.Enums.ScrollBars ScrollBars, bool Resizable, bool ShowToolBar, bool ShowStatusBar, bool ShowAddressBar )
    {
        try
        {
            StringBuilder sb = new StringBuilder();
            sb.Append( "try" );
            sb.Append( "{" );
            sb.AppendFormat( "Link='{0}';", Link );
            sb.AppendFormat( "Name='{0}';", Name.Replace( " ", "" ) );
            sb.Append( "    leftPos = 0;" );
            sb.Append( "    topPos = 0;" );
            sb.Append( "    if (screen) " );
            sb.Append( "    {" );
            sb.AppendFormat( "        leftPos = (screen.width / 2) - ( {0} / 2 );", Width );
            sb.AppendFormat( "        topPos = (screen.height / 2) - ( {0} / 2 );", Height );
            sb.Append( "    }" );
            sb.Append( @"
                        var myWindow = window;
                        if ((typeof(dialogArguments) !== 'undefined' amp;amp; dialogArguments != null))
                        {
                            if (typeof(dialogArguments.window) !== 'undefined' amp;amp; dialogArguments.window != null)
                            {
                                myWindow = dialogArguments.window;
                            }   
                        }
                        " );
            sb.AppendFormat( "    myWindow.open(Link,Name,'width={0},height={1},left='   leftPos   ',top='   topPos  ' ", Width, Height );

            //Check whether to show Scroll Bars
            switch ( ScrollBars )
            {
                case Sicon.API.Web.Enums.ScrollBars.One:
                    sb.Append( ",scrollbars=1 " );

                    break;

                case Sicon.API.Web.Enums.ScrollBars.Two:
                    sb.Append( ",scrollbars=2 " );

                    break;
            }

            //Check whether the window is resizable
            if ( Resizable )
            {
                sb.Append( ",resizable " );
            }

            //Check Whether to show the toolbar
            if ( ShowToolBar )
            {
                sb.Append( ",toolbar " );
            }

            //Show the status bar
            if ( ShowStatusBar )
            {
                sb.Append( ", status " );
            }

            //Show the address bar
            if ( ShowAddressBar )
            {
                sb.Append( ", location " );
            }

            sb.Append( "');" );
            sb.Append( "}" );
            sb.Append( "catch (e)" );
            sb.Append( "{" );
            sb.Append( "    alert(e.value);" );
            sb.Append( "}" );

            Page.ClientScript.RegisterStartupScript( this.GetType(), Name, sb.ToString(), true );

            sb = null;
        }
        catch ( Exception )
        {
            throw;
        }
    }
  

Затем на странице, которая открывает второе окно (вызовите методы базовой страницы)

     protected void btnBudgetOnlineMedia_Click( object sender, EventArgs e )
    {
        try
        {
            base.OpenWindow( Page.ResolveUrl( "~/CustomPages/BudgetOnlineMedia.aspx" ),
                800,
                600,
                "Med Report", 
                API.Web.Enums.ScrollBars.Two,
                true,
                false,
                false,
                false );
        }
        catch ( Exception ex )
        {
            ErrorLogging.LogError( ex );
        }
    }
  

Примечание: я вызываю window.open в объекте window, который передается из диалоговых аргументов.

Это, конечно, ужасно, у кого-нибудь есть решение получше?

Информация об этой проблеме здесь:

http://support.microsoft.com/kb/831678

ОБНОВЛЕНИЕ: Это также может быть связано с установкой IE10, похоже, что некоторые из моих настроек безопасности в Интернете были сброшены, и это повлияло на javascript. Также полезно реализовать обходной путь в коде, чтобы избежать этого в будущем в любом случае.