La sesión ASP.NET se vuelve nula después de la devolución de datos en local
Frecuentes
Visto 14,105 veces
3
Aquí está mi código que se ejecuta en la carga de la página:
protected void Page_Load(object sender, EventArgs e)
{
DisableChaching();
if (Request.Cookies["UserName"] == null)
{
if (Session["UserName"] == null)
{
Response.Redirect("~/Default.aspx");
}
else if (Session["AccessLevel"].ToString().Equals("2"))
{
Response.Redirect("~/Default.aspx");
}
}
else if (Session["AccessLevel"].ToString().Equals("2"))
{
Response.Redirect("~/Default.aspx");
}
if (!IsPostBack)
{
LoadControls();
BindGrid();
}
}
A veces, cuando trato de guardar algunos datos en la base de datos y obtengo un error, trato de volver a guardar los datos haciendo clic en mi botón Guardar, y aparece este error:
Referencia a objeto no establecida como instancia de un objeto
en la siguiente línea si el código:
else if (Session["AccessLevel"].ToString().Equals("2"))
¿Por qué recibo este error?
aquí está mi código en el control de usuario de inicio de sesión donde ChR es la casilla de verificación para recordar al usuario:
if (ChR.Checked == true)
{
Response.Cookies["UserName"].Value = txtUserName.Text.Trim();
Response.Cookies["UserName"].Expires = DateTime.Now.AddMonths(2);
Response.Cookies["AccessLevel"].Value = member.AccessLevel.ToString();
Response.Cookies["AccessLevel"].Expires = DateTime.Now.AddMonths(2);
Response.Cookies["FirstName"].Value = member.FirstName;
Response.Cookies["FirstName"].Expires = DateTime.Now.AddMonths(2);
Response.Cookies["LastName"].Value = member.LastName;
Response.Cookies["LastName"].Expires = DateTime.Now.AddMonths(2);
Session["UserName"] = txtUserName.Text.Trim();
Session["AccessLevel"] = member.AccessLevel.ToString();
Response.Redirect("~/Default.aspx");
}
else
{
Session["UserName"] = txtUserName.Text.Trim();
Session["AccessLevel"] = member.AccessLevel.ToString();
Session["FirstName"] = member.FirstName;
Session["LastName"] = member.LastName;
Response.Redirect("~/Default.aspx");
}
y en mi página maestra asigno valores a las sesiones de esta manera en el evento page_Load:
DisableChaching();
FillInfo();
if (Request.Cookies["UserName"] != null)
{
Session["UserName"] = Request.Cookies["UserName"].Value;
Session["AccessLevel"] = Request.Cookies["AccessLevel"].Value;
Session["FirstName"] = Request.Cookies["FirstName"].Value;
Session["LastName"] = Request.Cookies["LastName"].Value;
WellCome();
if (Session["AccessLevel"].ToString() == "1")
{
RenderMenu(AcccessLevel.SiteManager);
}
else if (Session["AccessLevel"].ToString() == "2")
{
RenderMenu(AcccessLevel.Client);
}
}
else if (Session["UserName"] != null)
{
WellCome();
if (Session["AccessLevel"].ToString() == "1")
{
RenderMenu(AcccessLevel.SiteManager);
}
else if (Session["AccessLevel"].ToString() == "2")
{
RenderMenu(AcccessLevel.Client);
}
}
else
{
WellGo();
RenderMenu(AcccessLevel.LogedOutUser);
}
enter code here
4 Respuestas
6
¡Creo que descubrí por qué mis sesiones se vuelven nulas! cuando quiero guardar información sobre un libro en db y guardar un archivo de imagen del libro en una carpeta de la aplicación, no tengo permiso para guardar el archivo y mi aplicación arroja un error y todas mis sesiones se vuelven nulas.
contestado el 04 de mayo de 12 a las 08:05
Eso significa que si hay algún error en la aplicación, ¡la sesión se vuelve nula! - HydPhani
1
Reemplace su código como se muestra a continuación.
string val = Convert.ToString(Session["AccessLevel"]);
if (val == "2")
{
}
Espero que entiendas la diferencia entre ==
y Equals()
public static String AccessLevel {
get
{
return Convert.ToString(HttpContext.Current.Session["AccessLevel"]);
}
set
{
HttpContext.Current.Session["AccessLevel"] = value;
}
}
contestado el 03 de mayo de 12 a las 17:05
si la sesión vuelve a ser nula, ¡obtendré el mismo error en la primera línea de código! - gwt
Puede omitir la llamada String.IsNullOrEmpty ya que las cadenas vacías y los valores nulos aún devolverían un falso al probar 'val=="2"' - El Moof
Convert.ToString
nunca arrojará un error, si el valor es nulo en el session variable
el mismo valor nulo se devolverá a la variable String. ¿Probaste el código mencionado anteriormente? - Pankaj
Por su código, no recibo el mensaje de error que mencioné antes, pero todavía hay un problema: ¡tampoco tengo el valor de la sesión! - gwt
@khashayar: si desea depurar, asegúrese de tener Session_start and end
eventos en global.asax
Archivo. Esto le ayudará a localizar la causa raíz real. solo configura breakpoints
en estos dos eventos para verificar minuciosamente la causa raíz de este problema. - Pankaj
0
¿Por qué recibo este error?
Porque Session["AccessLevel"]
es nulo y está intentando llamar a un método en un objeto nulo.
contestado el 03 de mayo de 12 a las 16:05
0
Para otros usuarios, verifique el tiempo de espera de su sesión. puede ser que sea el problema. puede cambiar el tiempo de espera predeterminado usando
<system.web>
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>
<sessionState timeout="60" />
</system.web>
Respondido 14 ago 15, 15:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# asp.net or haz tu propia pregunta.
¿Leíste esta publicación? arstechnica.com/civis/viewtopic.php?f=20&t=220827? - Adriano Repetti
¡¿Joe, no habías tenido ese problema antes?! eso podría traerte una idea de lo que podría estar mal? ¿Ves algo malo con mi código aquí? y también aquí está mi código para establecer valores de sesión: - gwt
Tal vez esté perdiendo la sesión porque el dominio de la aplicación se recicla. blogs.msdn.com/b/tess/archive/2006/08/02/… - Tim Schmelter
@khashayar: vote a favor y acepte la respuesta que aborda su problema correctamente. Esto también ayuda a otros usuarios de la comunidad que enfrentan problemas similares. - Pankaj
@Guest desafortunadamente me registré en este sitio web recientemente y no tengo suficiente reputación para votar. Si vota mi pregunta, creo que obtendré cierta reputación para votar la respuesta;) - gwt