C# 来自会话的值在IE中丢失

C# 来自会话的值在IE中丢失,c#,asp.net,.net,internet-explorer,session,C#,Asp.net,.net,Internet Explorer,Session,全部 我的网站上有很多成语。我可以在任何页面中选择/更改成语。习惯用法保存在会话中,如果更改习惯用法,则更改会话值。 问题是: 如果我更改主页中的默认习惯用法并转到其他页面,此会话值将丢失,因此,此页面不会被翻译。 但如果我重新加载这个页面一次或多次,就会转换当前页面。 这只发生在Webserver(Pheonix-US)中。在本地主机中,会话不会丢失值。 任何页面都会出现此问题,但仅在IE中。Chrome正常工作。 下面是我的主页源代码。所有页面基本上都是这个代码 protected void

全部

我的网站上有很多成语。我可以在任何页面中选择/更改成语。习惯用法保存在会话中,如果更改习惯用法,则更改会话值。 问题是:

如果我更改主页中的默认习惯用法并转到其他页面,此会话值将丢失,因此,此页面不会被翻译。 但如果我重新加载这个页面一次或多次,就会转换当前页面。 这只发生在Webserver(Pheonix-US)中。在本地主机中,会话不会丢失值。

任何页面都会出现此问题,但仅在IE中。Chrome正常工作。

下面是我的主页源代码。所有页面基本上都是这个代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //to set default session value. (first time).
        if (Session["idioma"] == null)
        {
            string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString();
            Idioma.MudaCultura(idioma);
            Session["idioma"] = idioma;
        }

        //if I've other session value (Change Idiom).
        else if (Session["idioma"] != null)
        {
            string idioma = Session["idioma"].ToString();
            Idioma.MudaCultura(idioma);
        }

        lblWelcome.Text = Idioma.RetornaMensagem("welcome");
        btnRequestAccess.Text = Idioma.RetornaMensagem("btnRequestAccess");
        btnTickets.Text = Idioma.RetornaMensagem("btnTickets");
        btnManager.Text = Idioma.RetornaMensagem("btnManager");
        btnManageFolders.Text = Idioma.RetornaMensagem("btnManageFolders");


        IdiomaList.Items.Add("PORTUGUÊS");
        IdiomaList.Items.Add("ENGLISH");
        IdiomaList.Items.Add("ESPAÑOL");

        //Set value that show in DropDown list according to Session value.

        if (Session["idioma"].ToString() == "pt")
        {
            IdiomaList.SelectedValue = "PORTUGUÊS";
        }

        else if (Session["idioma"].ToString() == "en")
        {
            IdiomaList.SelectedValue = "ENGLISH";
        }

        else if (Session["idioma"].ToString() == "es")
        {
            IdiomaList.SelectedValue = "ESPAÑOL";
        }

    }
}

protected void Idioma_OnChange(object sender, EventArgs e)
{
    if (IdiomaList.SelectedValue == "PORTUGUÊS")
    {
        Idioma.MudaCultura("pt");
        Session["idioma"] = "pt";
    }

    else if (IdiomaList.SelectedValue == "ENGLISH")
    {
        Idioma.MudaCultura("en");
        Session["idioma"] = "en";
    }

    else if (IdiomaList.SelectedValue == "ESPAÑOL")
    {
        Idioma.MudaCultura("es");
        Session["idioma"] = "es";
    }

    lblWelcome.Text = Idioma.RetornaMensagem("welcome");
    btnRequestAccess.Text = Idioma.RetornaMensagem("btnRequestAccess");
    btnTickets.Text = Idioma.RetornaMensagem("btnTickets");
    btnManager.Text = Idioma.RetornaMensagem("btnManager");
    btnManageFolders.Text = Idioma.RetornaMensagem("btnManageFolders");
}

我也遇到过同样的问题,IE每次重新加载页面时都会丢失会话。在我的例子中,这是由于服务器的时区不同步导致cookie在到达客户端时已经过期。看起来大多数浏览器仍然可以工作,而IE在导航到下一页时会破坏cookies。

这可能是浏览器设置问题。 要解决此问题,您可以查看以下链接


我希望它能对您有所帮助。

您如何导航到其他页面,我是说使用
响应。重定向
或按钮/LinkButton的
PostBackUrl
属性?我使用Botton导航。是的,可以。我在圣保罗(BR),网络服务器在Pheonix(美国),墨西哥城也有。但是,当我重新加载页面一次或多次时,为什么可以进行翻译?这意味着会话仍然有价值。这对我来说是个谜。你没有在http和https之间切换吗?没有!现在我的站点只使用HTTP。但我计划添加证书并使用https。我刚刚发现了一个事实。重新加载页面时,语言将在默认值和以前选择的值之间更改。正确的做法是仅使用会话的当前值加载页面。