O escopo de um objeto descreve a disponibilidade de sua abrangência e quem tem acesso a ele. Por exemplo, se um objeto é definido para ter alcance a uma pagina página, então ele está disponível apenas durante a duração da solicitação atual nessa página antes de ser destruído. Neste caso, somente a página atual tem acesso a esses dados, e ninguém mais pode lê-lo. No outro extremo da escala, se um objeto tem espaço de aplicação, em seguida, qualquer página pode utilizar os dados porque ele estará disponível durante toda a aplicação.
Um objeto da sessão é mantido para cada usuário que solicita uma página ou documento de um aplicativo ASP.NET. Variáveis armazenadas no objeto Session não são descartadas quando o usuário move a partir de uma página para outra no pedido; em vez disso, essas variáveis persistem enquanto o usuário está acessando páginas em seu aplicativo.
Page Class
Representa um arquivo .aspx, também conhecida como uma página Web Forms, solicitada a partir de um servidor que hospeda um aplicativo Web ASP.NET.
Page.Session Property
Obtém o objeto Session atual fornecido pelo ASP.NET.
Utilizando Variáveis de Sessão
1- Crie uma aplicação do tipo ASP.NET Web Application com o modelo C# Empty e chame seu projeto de AspNetSessionScope, crie uma nova pagina WebForms chamada default. Crie também uma classe chamada Cor. Utilize o código abaixo para cada respectivo arquivo e compile a aplicação:
2 – O evento Page_Load cria uma instancia do objeto da classe Cor e modifica o valor da cor do elemento DIV da pagina aspx de acordo com o valor inicializado pelo construtor do objeto Cor.
- Abra uma nova aba do navegador e copie e cole a url da pagina, você deve obter duas paginas com o texto vermelho.
- Volte na primeira aba e inclua o parâmetro cor no final da url e pressione enter: ?Cor=blue
3 – A cor foi modificada e o valor do parâmetro foi armazenado em uma variável de sessão que responsável por alterar a cor do elemento DIV nas seguintes condições:
- Se existir um parâmetro ou se houver uma variável de cor atrelada a sessão.
- Selecione a outra aba e a cor do elemento DIV ainda permanece vermelha, atualize a pagina e pronto a pagina mudará a cor do elemento DIV de acordo com a cor armazenada na sessão.
- Você pode mudar a cor do parâmetro na primeira aba e atualizar a pagina na segunda aba quantas vezes quiser, pode ainda abrir outras abas e a cor do elemento DIV sempre utilizara a cor armazenada na sessão da aplicação.
- Abra outro navegador, cole a url da segunda aba sem o parâmetro e poderá ver que ele inicializou a cor do objeto Cor (vermelho) porque possui sua própria sessão.
Exemplo:
Neste exemplo criamos uma pagina que lê a cor de um objeto e armazena em uma sessão, você pode modificar a cor através de um parâmetro, abrir novas abas no mesmo navegador e verificar como funciona uma variável de sessão. Você também pode abrir outro navegador e verificar que a variável é inicializada novamente por se tratar de uma nova sessão.
C#
Cor.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace AspNetSessionScope { public class Cor { // Declara atributo private string cor; public Cor() { // Inicializa cor no construtor cor = "red"; } // Propriedades public string MinhaCor { get { return cor; } } } }
default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="AspNetSessionScope._default" %> <%@ Import Namespace="AspNetSessionScope" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Desenvolvimento Aberto</title> <style type="text/css"> #MeuDiv { background-color: lightgrey; width: 300px; padding: 25px; border: 20px solid black; margin: 25px; } </style> </head> <body> <form id="form1" runat="server"> <div id="MeuDiv" runat="server"> <h1>ASP.NET - Desenvolvimento Aberto</h1> <h2>Escopo da Sessão - Cor</h2> <h3>Este é o valor da cor:</h3> <% // Se existir sessão utiliza cor // se não existir utiliza instancia do objeto string sessionCor = (string)Session["scor"]; if (sessionCor == null) { Cor cor = new Cor(); Response.Write(cor.MinhaCor); } else { Response.Write(sessionCor); } %> </div> </form> </body> </html>
default.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace AspNetSessionScope { public partial class _default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Define cor inical Cor cor = new Cor(); MeuDiv.Style["color"] = cor.MinhaCor; // Recupera parmetro string parametro = Request.QueryString["Cor"]; if (parametro != null) { // Modifica DIV e guarda cor na sessão MeuDiv.Style["color"] = parametro; Session["scor"] = parametro; } else { // Se existir sessão modifica DIV if (Session["scor"] != null) { string sessionCor = (string)Session["scor"]; MeuDiv.Style["color"] = sessionCor; } } } } }