Variables globales en un sitio ASP.NET

Me encuentro ahora mismo desarrollando un sitio web en ASP.NET 
para una asignatura de la universidad y esta tarde me he encontrado con que
necesito tener accesibles algunos datos en cualquiera de las páginas que
componen el sitio web, así que voy a dejar aquí las dos formas de hacer esto que
he encontrado.

Para poneros en situación os diré que mi sitio web está
compuesto por una MasterPage, varias páginas de contenido asociadas a la
MasterPage y dos páginas más que no están asociadas; la MasterPage tiene un
control de LoginName del cual quiero obtener el nombre del usuario que está
logueado en cada momento en cualquier página.

Aclaración: podemos obtener el nombre de
usuario logueado en el site mediante «this.User.Identity.Name», que sería mucho
más correcto para obtener el nombre del usuario en cualquier momento. Sin
embargo la idea es ejemplificar como llevar un dato de una parte a otra del site
en situaciones en las que no dispongamos del tipo de facilidades como la que
tenemos en el caso concreto que he utilizado de ejemplo en el post.

En el Web.config

Para hacer esto he visto varias maneras, la primera de todas se
trata de guardar los datos en el Web.config en la zona de «appSettings», esto lo
haría de la siguiente forma:

Primero añadiendo una clave a la zona de appSettings en el
Web.config

<appSettings>  

        <add key=»username» value=»valor» />

</appSettings>

Y luego en el código de la página en la que lo necesitemos podemos obtener o
modificar el valor de la clave mediante:

System.Configuration.ConfigurationSettings.AppSettings[«username»] 

En el Global.asax

Otra manera que he visto es utilizando el archivo Global.asax.
Este archivo opcional en los desarrollos de ASP.NET nos permite manejar eventos
que ocurren a nivel de la aplicación y de sesión, también nos permite declarar
valores que necesitemos entre las diferentes solicitudes.

El archivo Global.asax para que funcione tiene que permanecer
en la raíz de la aplicación y solo se admite uno por aplicación ejecutada. Si
tenemos algún otro archivo de este tipo en algún subdirectorio no se tendrán en
cuenta por la aplicación.

Cuando declaremos una variable dentro de Global.asax estará
disponible en todas las páginas de la aplicación. Lo podemos hacer de la
siguiente manera:

En el fichero Global.asax declaramos una variable string y
luego en Session_Start otorgamos el valor de la cadena a un objeto de tipo
Session que en mi caso se llama valorCadena.

public class Global : System.Web.HttpApplication
    {
        string
cadena=»valor inicial»;
        protected void Application_Start(object
sender, EventArgs e) { }
        protected void Session_Start(object sender,
EventArgs e)
        {
            Session[«valorCadena»] = cadena;

        }

          ……

Luego en la página que lo necesitemos podemos escribir valores:

       Session[«valorCadena»] = «la_cadena_que_quiera_poner»;

y leer de la variable:

       Label1.Text = (string)Session[«valorCadena»];

Aporte: Jorge Dieguez nos
hace un comentario interesante: «..te recomiendo que en lugar de una(o
varias) varaibles sueltas uses una clase que te centralize el acceso a la
infromacion de contexto(usuario,su perfil, o lo que sea), esta clase es la
responable de almacenear el estado en algun lugar(por ejemplo en la sesion) la
idea es que la aplicacion no sepa como y donde se guarda la informacion de
contexto..».
Quizás es la solución más elegante de todas las
planteadas.

Pues nada, si hay alguna corrección o manera más de hacer esto ponedlo en los
comentarios y así vamos completando entre todos el post

P.D.: Si queréis más información sobre Global.asax podéis leer algo más aquí

Saludetes 🙂