variables de sesión perdidas por alguna razón

Intento configurar una tienda electrónica. Al lado de cada elemento tengo unaasp:imagebutton cuando se hace clic en este botón de imagen, estoy comprobando si la sesión varialbesession["basket"] existe o no, si no, entonces agrego los valores en una lista (clase de entidad) y agrego esta lista en la sesión.

si la sesión no está vacía, recupero los valores de la sesión en Lista y cambio la lista y luego agrego la lista nuevamente a la sesión.

Problema

Por alguna razón, pierdo la variable de sesión, de repente. Revisé mi reloj (hora) y es impredecible a veces toma menos de 1 minuto, a veces 3 minutos y a veces 5 minutos, etc. ...

¿por qué pierdo la variable de sesión?

Busqué en Google y descubrí que puede suceder si usasResponse.Redirect - sin parámetro falso, o si estás en unUpdatePanel etc.

Estoy perdiendo la variable en la misma página por el momento.

Toda la idea se coloca en una variable de sesión y realiza el pago y recupera la variable de sesión en la segundaaspx page ... pero esto no siempre funciona, porque la mayoría de las veces las variables de sesión se vuelven vacías. Y a veces funciona.

¿Alguien puede aconsejar? ¿Qué y dónde debo verificar? En algunas páginas de sitios web (google) aconsejan usar el almacenamiento en caché, pero el almacenamiento en caché se basa en la aplicación, por lo que todos recuperarán el mismo valor.

En mi página, cualquier usuario (usuario autenticado o cualquiera) en otras palabras, cualquier usuario sin inicio de sesión debe poder realizar un pedido (enviaré una factura para pagar por adelantado) ...

No estoy usando webfarm, ni web garden ... Acabo de comprobar el estado de sesión de IIS - sitio web - Está en proceso, configuración de cookies = usar cookies, nombre = asp.net_sessionid, tiempo de espera = 20 ... .

¿por favor aconséjame

EsC#, ASPX 3.5, IIS7.5

NO tengo PAGE_LOAD en mi página ASPX.

// el único lugar donde pongo el sessoin = nulo es un botón de enlace, por lo demás no pongo nulo en la sesión ["cesta"] ....

protected void lnkDeleteAllSelected_Click(object sender, EventArgs e)
    {
        Session["Basket"] = null;
        ReloadBasketItems();

    }

 protected override void OnInit(EventArgs e)
    {

        base.OnInit(e);
        //System.Diagnostics.Debugger.Break();

        lvJuridisch.ItemDataBound += new EventHandler<ListViewItemEventArgs>(this.lv_ItemDataBound);
        lvJuridisch.DataBound += new EventHandler(lv_DataBound);

    }

imgButtonAddtoBasket -> se define como asp: imagebutton en asp: listview

 protected void imgButtonAddtoBasket_Click(object sender, ImageClickEventArgs e)
    {
        ListViewDataItem lvi = ((sender as ImageButton).NamingContainer) as ListViewDataItem;
        DataKey currentDataKey = (lvi.NamingContainer as ListView).DataKeys[lvi.DataItemIndex];
        WebShopInfo SingleItem = new WebShopInfo();
        SingleItem.cd_type_pub = currentDataKey[0].ToString();
        SingleItem.no_pub = currentDataKey[1].ToString();
        SingleItem.no_suite_pub = Convert.ToInt32(currentDataKey[2]);
        SingleItem.cd_langue = Convert.ToChar(currentDataKey[3]);
        SingleItem.lb_titre_red = (lvi.FindControl("HiddenfieldProductRed") as HiddenField).Value;

        SingleItem.m_price = Convert.ToDecimal((lvi.FindControl("hiddenField_M_Price") as HiddenField).Value);
        SingleItem.nm_price = Convert.ToDecimal((lvi.FindControl("hiddenField_NM_Price") as HiddenField).Value);
        SingleItem.mt_pourc_tva = Convert.ToDecimal((lvi.FindControl("hfBTW") as HiddenField).Value);


        List<WebShopInfo> lws = new List<WebShopInfo>();
        if (Session["Basket"] == null)
        {

            //Session is empty so add listview to the session....
            //Session.Timeout = 20;  -- I tried this but this is not working too...
            lws.Add(SingleItem);
            Session["Basket"] = lws;
        }
        else
        {
            //Session is not empty so get asp:listview from the session.
            lws = Session["Basket"] as List<WebShopInfo>;

            WebShopInfo wsi = lws.Where(a => a.cd_type_pub == SingleItem.cd_type_pub &&
                                            a.no_pub == SingleItem.no_pub &&
                                            a.no_suite_pub == SingleItem.no_suite_pub &&
                                            a.cd_langue == SingleItem.cd_langue).SingleOrDefault<WebShopInfo>();
            if (wsi != null)
                lws.Remove(wsi);

            if (SingleItem.Count > 0)
                lws.Add(SingleItem);
            Session["Basket"] = lws;
        }

        ReloadBasketItems();
    }

Respuestas a la pregunta(5)

Su respuesta a la pregunta