Personalização Objecto Profile O objecto Profile O objecto Profile permite armazenar informação única de um utilizador. Quando o utilizador visita novamente o site é possível usar a informação armazenada para apresentar ao utilizador uma versão personalizada da aplicação Web. Para personalizar uma aplicação é necessário: Guardar informação usando um identificador de utilizador único, Reconhecer o utilizador quando visita novamente o site, e Aceder a essa informação quando for necessário. Em ASP.NET 1.1 usava-se o objecto Session. Apresenta a desvantagem da volatilidade – por omissão persiste na memória, e só durante a sessão. Também se podia armazenar informação em bases de dados, mas era necessário escrever código para gravar e retribuir essa informação ASP.NET 2.0 introduz um novo objecto Profile que permite persistir os dados do utilizador de um modo muito mais eficiente. 1 AS.NET 2.0 Profiles O serviço de Profile de ASP.NET 2.0 simplifica a tarefa de guardar dados por utilizador. No objecto Profile pode-se armazenar objectos de qualquer tipo. O serviço de Profile trabalha com utilizadores autenticados e não autenticados. Pode-se especificar um provider de Profile, sendo por omissão, usada a instância SqlProfileProvider que armazena os dados do profile no servidor Web local. Para poder usar o objecto profile é necessário primeiro activar o serviço de Profile no ficheiro Web.config. No ficheiro Web.config configura-se o objecto Profile definindo uma lista de propriedades cujos valores se pretendem manter. O serviço de Profile disponibiliza essa informação usando uma API fortemente tipada, acessível em qualquer parte da aplicação. 2 Uso do objecto Profile Aplicação Web simples com apenas uma página: protected void Page_Load(object sender, EventArgs e) { if (Profile.PrimeiroNome != "") { Panel1.Visible = false; Response.Write("Bem-vindo " + Profile.PrimeiroNome + " " + Profile.UltimoNome); } else Panel1.Visible = true; } protected void Button1_Click(object sender, EventArgs e) { Profile.PrimeiroNome = TextBox1.Text; Profile.UltimoNome = TextBox2.Text; } 3 Uso do objecto Profile Server Error in '/Profiles' Application. Compilation Error Compiler Error Message: CS0117: 'System.Web.Profile.DefaultProfile' does not contain a definition for 'PrimeiroNome‘ Source Error: Line 15: if (Profile.PrimeiroNome != "") É necessário activar o serviço de Profile: No Solution Explorer, Add New Item… , Web Configuration File. No ficheiro Web.config definem-se 2 propriedades – PrimeiroNome e UltimoNome. <?xml version="1.0"?> <configuration> <system.web> <profile> <properties> <add name="PrimeiroNome"/> <add name="UltimoNome"/> </properties> </profile> </system.web> </configuration> 4 Uso do objecto Profile É necessário refrescar a listagem do projecto no Solution Explorer para ver a pasta App_Data criada e o ficheiro de base de dados ASPNET.MDF 5 Autenticação Windows Duplo clique na base de dados abre a janela Solution Explorer com as tabelas da base de dados. Seleccionando o menu “Show Table Data” podemos ver o conteúdo de cada tabela. Conteúdo das tabelas: aspnet_Profile e aspnet_Users 6 Autenticação ASP.NET Forms Por omissão ASP.Net usa Autenticação Windows. Na aplicação Web criada as propriedades do objecto Profile foram associadas ao nome do utilizador Windows. Autenticação Windows é útil para aplicações Intranet, mas para autenticar utilizadores externos é melhor usar autenticação ASP.NET Forms. Vamos mudar o modo de autenticação de Windows para Forms no ficheiro Web.config: <?xml version="1.0"?> <configuration> <system.web> <profile> <properties> <add name="PrimeiroNome"/> <add name="UltimoNome"/> </properties> </profile> <authentication mode="Forms" /> </system.web> </configuration> 7 Autenticação ASP.NET Forms Server Error in '/Profiles' Application. This property cannot be set for anonymous users. Vamos: Adicionar um nova página Login.aspx com o controlo Login. Adicionar um novo utilizador através do menu Website > ASP.NET Configuration. Alterar o elemento authentication e adicionar o elemento authorization do web.config. <authentication mode="Forms" > <forms name=".ASPXAUTH" loginUrl="Login.aspx“ protection="Validation“ timeout="999999" /> </authentication> <authorization> <deny users="?" /> </authorization> 8 Autenticação ASP.NET Forms Como é negado o acesso a todos os utilizadores não autenticados, a aplicação redirige para a página Login.aspx Efectuando login usando o nome do utilizador criado, surge a página Default.aspx 9 Autenticação ASP.NET Forms Conteúdo das tabelas: aspnet_Profile e aspnet_Users 10 Personalização Anónima Suporte para Profiles anónimos não está activo por omissão. É necessário: activar o serviço para utilizadores anónimos, na definição das propriedades do Profile no ficheiro Web.config explicitar as propriedades disponíveis para utilizadores anónimos. Ficheiro Web.config: <system.web> <profile> <properties> <add name="PrimeiroNome" allowAnonymous="true"/> <add name="UltimoNome" allowAnonymous="true"/> </properties> </profile> <authentication mode="Forms" > <forms name=".ASPXAUTH" loginUrl="Login.aspx" protection="Validation" timeout="999999" /> </authentication> <anonymousIdentification enabled="true" /> </system.web> 11 Personalização Anónima Conteúdo das tabelas: aspnet_Profile e aspnet_Users 12 Identificação do utilizador O serviço profile ASP.NET foi concebido para manter informação única do utilizador corrente. O Profile de um utilizador é associado com a identidade do utilizador. Profiles trabalham quer com utilizadores autenticados quer com utilizadores anónimos. Utilizadores Autenticados: Autenticação ASP.NET Forms Autenticação Windows ou Passport Utilizadores Anónimos: Suporte não activo por omissão. É necessário: activar o serviço para utilizadores anónimos, na definição das propriedades do Profile no ficheiro Web.config explicitar as propriedades disponíveis para utilizadores anónimos. As propriedades do profile não suportam acesso anónimo por omissão porque certas propriedades podem conter informação pessoal não disponível para utilizadores anónimos. 13 Utilizadores anónimos Se a identificação anónima está activa, ASP.NET cria uma identificação única para utilizadores que visitam o site pela primeira vez. Essa identificação é armazenada num Cookie no computador do utilizador para o utilizador ser identificado em cada pedido de página. O tempo de vida do Cookie, por omissão, é colocado em aproximadamente 70 dias e é periodicamente renovado quando o utilizador visita o site. Se o computador do utilizador não aceita cookies, a identificação do utilizador é mantida como parte do URL do pedido da página, mas perde-se quando o utilizador fecha o browser. 14 Migração de Personalização Anónima para Personalização Autenticada Em certos casos a aplicação pode manter informação personalizada para um utilizador anónimo e depois se o utilizador efectuar login, mudando a sua identidade, ser necessário migrar a informação da identidade do utilizador anónimo para a nova identidade autenticada. Exemplo de um utilizador anónimo usar o objecto Profile para adicionar itens ao carrinho de compras, e só na altura de efectuar check out e proceder ao pagamento efectuar o login. Quando um utilizador anónimo efectua login o evento Profile_MigrateAnonymous é gerado. 15 Migração de Personalização Anónima para Personalização Autenticada Adicione um novo item ao Projecto: Add New Item > Global Application Class > Add O nome do ficheiro é sempre Global.asax Exemplo de código para migrar a informação: <%@ Application Language="C#" %> <script runat="server"> void Profile_MigrateAnonymous(object sender, ProfileMigrateEventArgs e) { if (Profile.GetProfile(e.AnonymousID).PrimeiroNome != String.Empty){ Profile.PrimeiroNome = Profile.GetProfile(e.AnonymousID).PrimeiroNome; } if (Profile.GetProfile(e.AnonymousID).UlimoNome != String.Empty) { Profile.UltimoNome = Profile.GetProfile(e.AnonymousID).UltimoNome; } } </script> 16