ariáveis de sessão perdidas por algum moti
Tento configurar uma loja virtual. Ao lado de todos os itens que eu tenhoasp:imagebutton
quando este botão de imagem é clicado, estou verificando se a sessão varsession["basket"]
existe ou não, caso contrário, adiciono os valores em uma lista (classe de entidade) e adiciono esta lista na sessã
se a sessão não estiver vazia, recupero os valores da sessão para List e altero a lista e adiciono a lista novamente à sessã
Questão
Por alguma razão, perco a variável de sessão, de repente. Eu verifiquei no meu relógio (hora) e é imprevisível, às vezes leva menos de 1 minuto, às vezes 3 minutos e às vezes 5 minutos etc ....
por que perco a variável de sessão?
Pesquisei no Google e descobri - isso pode acontecer se você usarResponse.Redirect
- sem o parâmetro false, ou se você estiver em umUpdatePanel
etc.
Estou perdendo a variável na mesma página no moment
Toda a ideia é colocada em uma variável de sessão e efetua checkout e recupera a variável de sessão no segundoaspx
page ... mas nem sempre isso funciona, porque na maioria das vezes as variáveis da sessão ficam vazias. E às vezes funciona.
alguém pode aconselhar? o que e onde preciso verificar? Em algumas páginas do site (google), eles recomendam o uso do cache, mas o cache é baseado em aplicativos, para que todos recuperem o mesmo valo
Na minha página, qualquer usuário (usuário autenticado ou anônimo) em outras palavras, qualquer usuário sem login deve poder solicitar (enviarei uma fatura para pagar antecipadamente) ....
Não estou usando o webfarm, nem o web garden ... Acabei de verificar o IIS - site - estado da sessão - Está em processo, configurações de cookie = usar cookies, nome = asp.net_sessionid, time-out = 20 ... .
Conselho por favor
EstáC#
, ASPX 3.5
, IIS7.5
Não tenho PAGE_LOAD na minha página ASP
// o único lugar em que coloco o sessoin = null é um botão de link, para o resto não coloco nulo na sessão ["basket"] ....
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 -> é definido como asp: imagebutton no 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();
}