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
Download

Uso do objecto Profile