Cómo evitar que la variable Session.SessionID cambie

Si creas una página en ASP.NET y en su evento Load pones lo siguiente:

VB.NET:
  1. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.         Label1.Text = Session.SessionID & " " & Session("idsesion")
  3.         Response.Write(Session.SessionID)
  4.     End Sub

notarás que cada vez que oprimes Refresh o Actualizar en tu navegador, la variable de sesión se modifica. Definitivamente es raro porque uno siempre ha sabido que la variable de sesión debe ser la misma durante todo el tiempo que el visitante permanece visitando la aplicación.

Bueno, la variable de sesión permanece igual siempre y cuando se coloque algún valor en el estado de la sesión. (yo tampoco entiendo muy bien la razón).

El caso es que para solucionar el problema "de raíz", creé una variable de sesión en el código del archivo Global.asax, justo cuando se crea la sesión (checa la línea 21):

VB.NET:
  1. <%@ Application Language="VB" %>
  2.  
  3. <script runat="server">
  4.  
  5.     Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
  6.         ' Code that runs on application startup
  7.     End Sub
  8.    
  9.     Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
  10.         ' Code that runs on application shutdown
  11.     End Sub
  12.        
  13.     Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
  14.         ' Code that runs when an unhandled error occurs
  15.     End Sub
  16.  
  17.     Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
  18.         ' Code that runs when a new session is started
  19.         'La siguiente linea evita que session.sessionid se modifique cada
  20.         'vez que se oprime Refresh en el navegador
  21.         Session("idsesion") = Session.SessionID
  22.     End Sub
  23.  
  24.     Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  25.         ' Code that runs when a session ends.
  26.         ' Note: The Session_End event is raised only when the sessionstate mode
  27.         ' is set to InProc in the Web.config file. If session mode is set to StateServer
  28.         ' or SQLServer, the event is not raised.
  29.     End Sub
  30.        
  31. </script>

Esto hace que el estado de la sesión permanezca sin modificarse y ahora el código del Response.Write(Session.SessionID) citado anteriormente regresa siempre el mismo valor. =)

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.