• Nenhum resultado encontrado

Desenvolvimento ASP.net

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento ASP.net"

Copied!
107
0
0

Texto

(1)

Desenvolvimento

ASP.net

Paulo Proença

Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto

(2)

.Net Apprentice

z Conjunto de três sessões cobrindo as

áreas básicas do desenvolvimento na plataforma .Net (focando na internet)

z Desenvolvimento web com ASP.net

z Desenvolvimento de componentes e acesso

a dados com ADO.NET

z XML e desenvolvimento de Web Services em

(3)
(4)

Laboratório .NET

z Comunidade z Participar, promover z Eventos z Participar ou organizar z Convites z “Projectos” de investigação

(5)

Desenvolvimento

ASP.net

Paulo Proença

Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto

(6)

Agenda

z Framework .net

ƒ Common Language Runtime

ƒ Assembly ƒ Garbage Collection z Conceitos de C# ƒ Características da Linguagem ƒ Operadores e estruturas z ASP .net ƒ Paradigma ASP.net ƒ Visual Studio .NET

(7)

Framework .net

(8)
(9)

Framework .net

z Conjunto de tecnologias para o

desenvolvimento e utilização de componentes para a criação de:

z Web Forms z Web Services

z Aplicações Windows

z Suporta todos as fases da produção de

Software

z Desenvolvimento z Debugging

(10)

Common Language Runtime - CLR

z Ambiente que permite a execução em

tempo real de aplicações.

z Fornece um conjunto de serviços, ao

nível das fases de desenvolvimento, de distribuição e de execução, que

(11)

CLR - Serviços

z Fase de Desenvolvimento

z Diversas linguagens de programação z Aumento de produtividade

z Fase de Instalação

z Processo de instalação resume-se a uma cópia de ficheiros (XCOPY)

z A gestão de versões de componentes é feita no processo de compilação

z Fase de Execução

(12)

CLR - Arquitectura

Class Loader MSIL to Native Compilers (JIT) Code Manager Garbage Collector (GC) Security Engine Debug Engine

Type Checker Exception Manager Thread Support COM Marshaler Base Class Library (.NET Framework) Support

Converte código MSIL para código nativo optimizado

Controla a execução do código Gestão de memória

Procedimentos de segurança baseados na identificação do utilizador e na localização do código

Permite fazer debug da aplicação Impede conversões inadequadas e gere o

acesso às variáveis

Tratamento de erros Fornece classes e interfaces para

utilização de threads

Sequencia a distribuição dos componentes

(13)

CLR - Características

z Sistema Comum de Tipos

z Conversão directa dos tipos de informação da

Linguagem de programação para os da Framework

z Compilador Just-in-time (JIT)

z O JIT converte o código intermédio (MSIL) em código nativo optimizado

z Gestão de memória – Garbage Collection

z Evita problemas de “falta de memória disponível”

z Tratamento de Excepções

(14)

Compilação e Execução

Class Loader Class Loader Class Loader JIT Compiler with optional verification JIT Compiler JIT Compiler with optional with optional verification verification Execution Execution EXE/DLL (MSIL and metadata) EXE/DLL (MSIL and metadata) Class Libraries (MSIL and metadata) Class Libraries (MSIL and metadata) Trusted, pre-JITed code only Call to an uncompiled method Managed Native Code Compiler Compiler Source Code Source Code

(15)

Assembly

z Contêm código e metadata para o CLR

z Constitui-se como unidade básica de

distribuição

(16)
(17)

DEMO 01: ildasm.exe

z Desenvolver uma pequena aplicação em VB .NET e em C#

z Utilizar a aplicação ildasm para verificar o código MSIL gerado

(18)

Algoritmo “Garbage Collection”

z Espera que todas as threads terminem

z Verifica quais os objectos que estão

referenciados. A memória ocupada pelos objectos não referenciados é libertada.

z Desloca os objectos válidos para a

“compact heap”

(19)
(20)

Conceitos de C#

(21)

Introdução ao C#

z Linguagem baseada no C/C++

z com inspiração no Java

z preserva investimentos e conhecimentos

adquiridos

z permite um código mais “limpo”

z possui construções sintácticas especiais

para retirar partido da framework

(22)

Tipos de dados

z object z string

z sbyte, short, int, long z byte, ushort, uint, ulong z char

z float, double, decimal z bool

z Estes tipos são alias para os tipos definidos na

framework

(23)

Classes e namespaces

z Organização do código dentro de

classes

z Classes organizadas dentro de

namespaces

namespace Demo {

public class MyClass { ...

(24)

Métodos

z Sintaxe semelhante ao C/C++

z Podem ser públicos ou privados

z Suporta overloading

public class MyHelloWorld { ...

public void SayHello() { ... }

private void SetTitle(String Title) { ... }

(25)

Passagem de parâmetros

z Por valor

z Por referência

z out – parâmetro de saída

z ref – parâmetro de entrada e saída

public void func1(int x) { ... }

public void func2(out int x) { ... }

(26)

Herança

z Apenas existe herança simples

public class MyClassBase { ...

public void Func() { ... } }

public class MyClassDeriv : MyClassBase { ...

(27)

Propriedades

z Sintaxe alternativa para acesso a

membros de dados da classe mas com as vantagens dos métodos

public class Button : Control {

private string m_caption; public string Caption {

get { return m_caption; }

set { m_caption = value; Repaint(); } }

(28)

Operadores

z Atribuição ƒ = z Relacionais ƒ < <= > >= == != z Lógicos ƒ && || ! z Aritméticos ƒ + - * / % ƒ += -= *= /= ++

(29)

--Constantes

z Pré-definidas

ƒ null

ƒ true false

z De utilizador

(30)

Criação de objectos

// definição da classe

public class MyClass { ... }

// definição da variável

MyClass obj;

// criação do objecto

(31)

Construtores

z Seguem as regras do C/C++

z Mesmo nome da classe

z Sem tipo de retorno

z Podem ter ou não argumentos

public class MyClass { ...

public MyClass() { ... }

public MyClass(String Title) { ... } }

(32)

Ciclos

// repetição n vezes

for (int x = 0; i < vec.Length; i++) Console.WriteLine(vec[i]);

// repetição condicional

int i = 0;

while (i < vec.Length) {

Console.WriteLine(vec[i]); i++;

}

// enumeração (colecções)

foreach (String x in vec) Console.WriteLine(x);

(33)

Estruturas Condicionais

// teste de decisão if (i < vec.Length) Console.WriteLine(vec[i]); else Console.WriteLine(“Erro!!!”); // teste múltiplo switch (x) { case 1: ...; break;

case 2: ...; goto case 3;

case 3: ...; break;

(34)

ASP.net

(35)

O que é o ASP.net?

z Sucessor da tecnologia Active Server

Pages

z Independente da linguagem utilizada

z Independente do browser cliente

z Informação inserida no cliente é

directamente processada no servidor (conceito de Web Form)

z Criação de aplicações Web distribuídas

(36)

Aplicação ASP.net

XML Data Database Internet Internet Page1. aspx Page2. aspx Web Services Web

Services ComponentsComponents

Web Forms Code-behind pages global. asax Web. config machine. config

ASP.NET Web Server

Output

Cache

(37)
(38)

Visual Studio .NET

z Um só IDE (Integrated Development

Environment) para múltiplas linguagens e múltiplos tipos de projectos

z Múltiplas linguagens num só projecto

z Múltiplos projectos numa só solução

z Integra browser

z Permite efectuar debbug

(39)

Templates de Projectos

z A lista dos templates de projectos baseia-se

no perfil do utilizador e na escolha do tipo de projecto

(40)

IDE VS.net

Toolbox Solution Explorer Editor/Browser Properties Server Explorer Object Browser

(41)

Processo de Desenvolvimento

Fase de análise e especificação Fase de análise e especificação Compilar Compilar Fase de testes Fase de testes Produzir a interface e escrever código Produzir a interface e escrever código Criar um projecto Criar um projecto

(42)

Ficheiros da aplicação Web

z Solution files (.sln, .suo)

z Project files (.vbproj, .csproj) z Web application files

z Web forms (.aspx) z User Controls (.ascx) z Web services (.asmx)

z Classes, code-behind pages (.cs, .vb) z Global application classes (.asax)

z Web.config file

(43)

Estrutura de Ficheiros da

Aplicação Web

wwwroot wwwroot Inetpub Inetpub ProjectA ProjectA My Documents My Documents Development Files Development Files WebForm1.aspx WebForm1.aspx.cs (Code-behind page) Visual Studio Projects Visual Studio Projects Solution Solution Solution.sln ProjectA.csproj

(44)

DEMO 02: Visual Studio .NET

z Apresentação do IDE VS.NET

(45)

O que são Web Forms?

z Ficheiros com extensão aspx

z Constituídos essencialmente por:

z Atributo Page (directiva @Page)

z Atributo Body z Atributo Form <%@ Page language="c#“ Codebehind="WebForm1.aspx.cs” Inherits=“nomeAplicacao.WebForm1”%> <%@ Page language="c#“ Codebehind="WebForm1.aspx.cs” Inherits=“nomeAplicacao.WebForm1”%> <body MS_POSITIONING="GridLayout"> <body MS_POSITIONING="GridLayout">

(46)

Web Forms –

Modelo de Objectos

z As Web Forms possuem um modelo de

objectos interno constituído por:

z Objecto Server

ƒ Representa o Servidor Web

z Objecto Page

ƒ Representa a página Web

z Objecto Request

ƒ Representa o pedido efectuado pelo browser cliente

z Objecto Response

ƒ Represente a resposta a enviar ao cliente pelo servidor

(47)

Web Forms –

Atributo FORM

z Dentro do atributo FORM colocam-se

controlos denominados “Server Controls”

z Web Server Controls

ƒ Intrinsic controls (asp:TextBox)

ƒ Validation controls (asp:RequiredFieldValidator)

ƒ Rich controls (asp:Calendar)

ƒ List-bound controls (asp:DataGrid )

ƒ Internet Explorer Web Controls

(http://www.asp.net/IEWebControls/Download.aspx)

(48)

Server Controls

z Runat=“server”

z São executados no Servidor Web

z Armazenam informação de estado (viewstate)

z Têm funcionalidades intrínsecas

z Modelo de programação comum

z Todos têm os atributos Id e Text

z Geram código HTML específico para o browser

cliente

<asp:Button id=“Button1” runat=“server” Text=“Submit”/>

<asp:Button id=“Button1” runat=“server” Text=“Submit”/>

(49)

HTML server controls

z Baseados nos elementos HTML

z Runat=“server”

z Existem no namespace

System.Web.UI.HtmlControls

<input type="text" id="txtName"

runat="server" />

<input type="text" id="txtName"

(50)

Web server controls

z Existem no namespace System.Web.UI.WebControls Sintaxe ASP.net HTML gerado <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox> <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox>

<input name="TextBox1" type="text" value="Text_to_Display"

<input name="TextBox1" type="text" value="Text_to_Display"

(51)

Escolher o Controlo Adequado

Necessitar de funcionalidades especificas tais como um

“calendar” O controlo irá interagir com scripts

no cliente e no servidor

Pretender desenvolver páginas que serão visualizadas por diversos tipos de browsers Pretender fornecer rapidamente

funcionalidades ASP.NET a páginas HTML já existentes

Preferir trabalhar com um modelo de programação orientado a

objectos Preferir trabalhar com a estrutura

de objectos HTML

Optar

Optar porpor

Web Server Controls

Web Server Controls se:se: Optar

Optar porpor

HTML Server Controls

HTML Server Controls se:se:

A largura de banda disponível não A largura de banda for limitada

(52)

DEMO 03: Server Controls

z Criar um Web Form

(53)

Como programar em ASP .NET

z Três métodos de implementar código:

z Colocar o código no mesmo ficheiro que contem os

Server Controls misturado com as definições dos

mesmos (mixed)

z Colocar o código no mesmo ficheiro que contem os

Server Controls, mas numa zona separada das definições dos controlos (inline code)

z Colocar o código num ficheiro separado (code-behind pages)

z Por defeito o VS .NET utiliza ficheiros separados de código (code-behind)

(54)

Programação Inline

z Definição dos controlos e código no mesmo

ficheiro

z Secções separadas para o código e para o

HTML

<HTML>

<asp:Button id="btn" runat="server"/> </HTML>

<SCRIPT Language="c#" runat="server">

private void btn_Click(object sender, System.EventArgs e) {

. . . }

<HTML>

<asp:Button id="btn" runat="server"/> </HTML>

<SCRIPT Language="c#" runat="server">

private void btn_Click(object sender, System.EventArgs e) {

. . . }

(55)

Programação Code-Behind

z Código e HTML em ficheiros separados

z Programadores e Web Designers podem trabalhar de forma independente

Form1.aspx

Form1.aspx Form1.aspxForm1.aspx Form1.aspx.csForm1.aspx.cs

<tags>

<tags>

c

c

ó

ó

digo

digo

c

c

ó

ó

digo

digo

Ficheiros separados Um só ficheiro

(56)

Como funcionam as página

com Code-Behind?

z Ficheiros separados para interface e para

o código

z A ligação dos ficheiros é feita pela directiva

@ Page no processo de pré-compilação

(JIT-compile) Page1.aspx <% @ Page Language="c#" Inherits="Project.WebForm1" Codebehind="Page1.aspx.cs" Src = "Page1.aspx.cs" %> Page1.aspx.cs

public class WebForm1 {

private void cmd1_Click() {

(57)

O que são Event Procedures?

z Acções em resposta à interacção do

(58)

Scripts no cliente

z Só utilizados com controlos HTML

z Interpretado pelo browser e executado no

cliente

z Não acede a recursos do servidor z <SCRIPT language="language">

Internet .HTM

(59)

Scripts no servidor

z Utilizado em qualquer tipo de Server Control z Compilado e executado no servidor

z Tem acesso aos recursos do servidor

z <SCRIPT language=“cs“ runat="server">

Internet .ASPX

(60)

Tratamento de eventos no

Cliente e no Servidor

(61)

DEMO 04: Eventos

z Criar procedimentos que permitam responder a eventos capturados pelos controlos da web form

(62)

Como se processa o

(63)

Tratamento do evento

Postback -

uso de Page.IsPostBack

z O evento Page_Load ocorre em cada

pedido á página.

z A propriedade IsPostBack do objecto

Page permite verificar se se trata do

primeiro pedido ou não.

private void Page_Load(object sender, System.EventArgs e) {

if (!Page.IsPostBack) {

// executes only on initial page load

private void Page_Load(object sender, System.EventArgs e) {

if (!Page.IsPostBack) {

(64)

Viewstate

z Permite armazenar informação na Web Form num par Chave/Valor. Esta informação é passada entre pedidos num campo escondido do formulário.

z Mecanismo activo por defeito. Pode, no entanto, ser ajustado ao nível da Web Form e do controlo.

<%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server"> <%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server">

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />

(65)

Viewstate

z Para armazenar informação no viewstate

z Para recuperar informação do viewstate

string Texto; Texto=(string)ViewState[“Chave”]; string Texto; Texto=(string)ViewState[“Chave”]; ViewState[“Chave”]=Valor; ViewState[“Chave”]=Valor;

(66)

DEMO 05: Page_Load

z Definir procedimento Page_load

(67)

O que é validação da informação

inserida pelo utilizador?

z Verifica se o valor inserido num controlo

está minimamente coerente com a informação pretendida

z Bloqueia o processamento da página até

(68)

Validação no Cliente e no

Servidor

z ASP.NET cria processos

de validação no cliente e no servidor z Validação no Cliente z Dependente do browser z Resposta imediata z Reduz número de pedidos ao servidor z Validação no servidor z Repete todas as validações efectuadas no cliente

z Permite utilizar recursos

Valid? Valid? User Enters Data No No Yes Yes Error Message Client Server

(69)

Controlos de Validação

O ASP.NET fornece controlos de validação para:

z Comparar valores

z Comparar com uma fórmula pré-definida

z Verificar se um valor pertence a um

intervalo

z Confrontar com expressões regulares

z Exigir preenchimento de informação

z Sumariar as validações inseridas numa

(70)

Controlos de Validação

Como utilizar?

1. Colocar o controlo na web form

2. Seleccionar o controlo que se pretende validar

3. Configurar as propriedades de validação

<asp:Type_of_Validator id="Validator_id" runat="server" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control"> <asp:Type_of_Validator id="Validator_id" runat="server" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control">

<asp:TextBox id="txtName" runat="server" />

<asp:TextBox id="txtName" runat="server" />

1 1 1 2 2 2 3 3 3

(71)

Controlos de validação

Posicionamento

z Definir as mensagens de erro

z Escolher modo de exibição

z Static

(72)

Controlos de validação

Combinação

z Pode haver vários controlos de validação

afectos a um mesmo objecto

z Somente o RequiredFieldValidator verifica se

(73)

Controlos de Validação

z RequiredFieldValidator zInitialValue z CompareValidator zValueToCompare or ControlToCompare zType zOperator z RangeValidator zMinimumValue zMaximumValue zType

(74)

Controlos de Validação

z RegularExpressionValidator

zPermite confrontar valores com expressões

regulares

zO VS .NET já inclui algumas expressões

regulares (p.e: emails)

<asp:RegularExpressionValidator … ControlToValidate=“Email"… ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >*</asp:RegularExpressionValidator > <asp:RegularExpressionValidator … ControlToValidate=“Email"… ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >*</asp:RegularExpressionValidator >

(75)

Controlos de Validação

z CustomValidator

z Permite validar no cliente, no servidor, ou em ambos

zClientValidationFunction zOnServerValidate <asp:RequiredFieldValidator id="txtNameValidator" runat="server" ControlToValidate="txtOddNum" ClientValidationFunction="ClientValidateName" OnServerValidate="ServerValidateName"

ErrorMessage="You must enter an odd number" display="dynamic" Text="*"> <asp:RequiredFieldValidator id="txtNameValidator" runat="server" ControlToValidate="txtOddNum" ClientValidationFunction="ClientValidateName" OnServerValidate="ServerValidateName"

ErrorMessage="You must enter an odd number" display="dynamic" Text="*">

(76)

Controlos de Validação

z ValidationSummary

z Apresenta as mensagens de erro de todos

os controlos de validação da página

<asp:ValidationSummary id="valSummary"

runat="server"

HeaderText="These errors were found:"

ShowSummary="True" <asp:ValidationSummary

id="valSummary" runat="server"

HeaderText="These errors were found:"

ShowSummary="True" DisplayMode="List"/>

(77)

Propriedade Page.IsValid

Verifica o estado de todos os controlos de validação inseridos na página

private void cmdSubmit_Click(object s, System.EventArgs e)

{ if (Page.IsValid)

{ Message.Text = "Page is Valid!";

// Perform database updates or other logic // here

}

private void cmdSubmit_Click(object s, System.EventArgs e)

{ if (Page.IsValid)

{ Message.Text = "Page is Valid!";

// Perform database updates or other logic

// here

(78)

DEMO 06: Validações

z Usar controlos de validação

(79)

O que é um User Control?

z Um User Control é um Web Server

Control definido pelo programador

z Tem extensão .ascx

z Simplifica a reutilização de componentes

de interface dentro de uma aplicação web

z Não contem as etiquetas <HTML>,

<BODY> e <FORM>

z Contem o código para tratar os seus

próprios eventos

<%@ Control Language=“c#" %> <%@ Control Language=“c#" %>

(80)

Porquê utilizar User Controls?

z

Reutilização de componentes de

interface e de código

Page2.asp x Control1.ascx Page1.aspx Page3.aspx Aplicação A Aplicação B

(81)

Criação de um User Control

z Dois métodos:

z Utilizando o Visual Studio .NET

z Converter uma página ASP.NET para user control

z A interacção é feita alterando as propriedades

public int pNum { get { return Convert.ToInt32(txtNum.Text); } set { txtNum.Text = Convert.ToString(value); } }

public int pNum { get { return Convert.ToInt32(txtNum.Text); } set { txtNum.Text = Convert.ToString(value); } }

(82)

DEMO 07: User Control

z Criação de User Controls z Utilização de User Controls

(83)

Gestão do estado

First Name

Last Name

Please enter your logon information: John Submit Submit Chen Web Server Web Server Login.aspx Login.aspx Web Server Web Server

Hello John Chen

Greetings.aspx Please enter your

logon information: John Submit Submit Chen Hello Greetings.aspx First Name Last Name

(84)

Tipos de Gestão de Estado

Query strings

z Informação inserida no final da

Base de Dados

z Poderá ser utilizada uma BD para

Propriedade ViewState

z Permite guardar valores entre

pedidos á página

Objecto Session

z Só o utilizador da sessão terá

acesso á informação

Cookies

z Ficheiro de texto com informação

do estado

Objecto Application

z Informação fica disponível para

todos os utilizadores da aplicação

No

No ClienteCliente No

(85)

Gestão de Estado no Servidor

z O objecto Application permite armazenar

informação de toda a aplicação web

z O uso de Session está condicionado á

sessão do browser cliente

z A sessão ASP.NET é identificada pela

propriedade SessionID do objecto session

Servidor Web

Servidor Web

Cliente

Cliente

(86)

Gestão de Estado no Cliente

z Utilização de cookies (persistentes / temporárias)

z Menos fiável que a gestão no servidor

z O utilizador pode apagar as cookies

z Limite ao tamanho da informação

z Restrições no cliente ao tamanho de ficheiros

Servidor

Servidor

Cliente

(87)

Global.asax

z Só um ficheiro Global.asax por aplicação

Web

z Colocado na raiz da directoria virtual

z Utilizado para tratar os eventos dos

(88)

Global.asax

z Eventos tratados

zApplication_Start

ƒExecutado imediatamente antes da aplicação ser criada. zSession_Start

ƒExecutado imediatamente antes da sessão ser criada zApplication_BeginRequest

ƒExecutado por cada pedido ao servidor zApplication_EndRequest

ƒExecutado no final de cada pedido ao servidor zApplication_AuthenticateRequest

ƒExecutado antes da autenticação de um utilizador zApplication_Error

ƒExecutado por cada erro não previsto na aplicação zSession_End

ƒExecutado imediatamente antes do final da instância da sessão zApplication_End

(89)

Variáveis de Sessão e de

Aplicação

z Inicializadas no Global.asax

z Operações de manuseamento normais

protected void Application_Start(Object sender,EventArgs e) {

Application["NumberofVisitors"] = 0; }

protected void Application_Start(Object sender,EventArgs e) { Application["NumberofVisitors"] = 0; } Session["BackColor"] = "blue"; Application.Lock(); Application["NumberOfVisitors"] = (int)Application["NumberOfVisitors"] + 1; Application.UnLock(); strBgColor = (string)Session["BackColor"]; Session["BackColor"] = "blue"; Application.Lock(); Application["NumberOfVisitors"] = (int)Application["NumberOfVisitors"] + 1; Application.UnLock(); strBgColor = (string)Session["BackColor"];

(90)

Persistência das variáveis de

Sessão e de Aplicação

z O objecto Sessão persiste em memória

um tempo definido após o último acesso

z Por defeito 20 min

z Esse tempo pode ser alterado no Web.config

z As variáveis de Aplicação persistem até

à ocorrência do evento Application_End

<configuration> <system.web> <sessionState timeout="10" /> </system.web> </configuration> <configuration> <system.web> <sessionState timeout="10" /> </system.web> </configuration>

(91)

Cookies

z Criação da cookie

HttpCookie objCookie = new HttpCookie("myCookie"); DateTime now = DateTime.Now;

objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue");

objCookie.Expires = now.AddHours(1);

Response.Cookies.Add(objCookie);

HttpCookie objCookie = new HttpCookie("myCookie");

DateTime now = DateTime.Now;

objCookie.Values.Add("Time", now.ToString());

objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue");

objCookie.Expires = now.AddHours(1);

(92)

Cookies

z Obter informação da cookie

HttpCookie objCookie = Request.Cookies[“myCookie”];

lblTime.Text = objCookie.Values["Time"];

lblTime.ForeColor = System.Drawing.Color.FromName

(objCookie.Values["ForeColor"]); lblTime.BackColor = System.Drawing.Color.FromName

(objCookie.Values["BackColor"]); HttpCookie objCookie = Request.Cookies[“myCookie”];

lblTime.Text = objCookie.Values["Time"];

lblTime.ForeColor = System.Drawing.Color.FromName

(objCookie.Values["ForeColor"]); lblTime.BackColor = System.Drawing.Color.FromName

(93)

Cookieless Sessions

z No Web.config

z Cada sessão é caracterizada por um

identificador de sessão que transita entre o cliente e o servidor incluído no URL

z Impossibilita a utilização de URLs absolutas

z Maioria dos browsers limita o tamanho da URL a

<sessionState cookieless="true" />

<sessionState cookieless="true" />

http://server/(h44a1e55c0breu552yrecobl)/page.aspx

(94)

DEMO 08: Gestão de estado

z Global.asax

z Variáveis de Sessão e de Aplicação z Utilização de Cookies

(95)

Métodos de Autenticação do

ASP.NET

z Windows

z Assenta no SO e no IIS

z Utilizador faz um pedido seguro que é transferido ao IIS z Após as credencias serem verificadas, o pedido é

satisfeito

z Forms

z É feito um acesso não autenticado a um Form HTML

onde serão fornecidas as credenciais

z Após verificação é atribuída uma cookie de autenticação

z Microsoft Passport

(96)
(97)

Comparação entre os Métodos

de Autenticação

ƒ Uma só assinatura para diversos sites web

ƒ Não necessita de armazenar

ƒ Adequado à maioria das aplicações web

ƒ Suporta todos os tipos de clientes

ƒ Utiliza infra-estrutura Windows

ƒ Controla acesso a informação sensível Vantagens Vantagens ƒ Baseia-se em cookies ƒ Serviço pago Microsoft Passport ƒ Baseia-se em cookies Forms

ƒ Não se adequa à maioria das aplicações web

Windows

Desvantagens

Desvantagens

M

(98)

Como activar a autenticação

baseada no Windows

z Configurar IIS para utilizar pelo menos um

dos seguintes mecanismos de autenticação

zBasic zDigest

zIntegrated Windows security

z Alterar no Web.config 1 1 1 2 2 2 <system.web> <authentication mode="Windows" /> <system.web> <authentication mode="Windows" /> </system.web>

(99)

z No acesso à Web Form, o IIS pede ao cliente que se

Como activar a autenticação

baseada no Windows

z Configurar Authorization no Web.config

<location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> <location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> 4 4 4 3 3 3

(100)

Autenticação

baseada em Forms

Client requests page

ASP.NET Forms Authentication Not Authenticated Authenticated Logon Page (Users enter their credentials) Authenticated Authorized Not Authenticated Access Denied

8

8

8

8

IIS Username Password Someone *********** Submit Submit 1 1 1 222 3 3 3 4 4 4 6 6 6

(101)

Como activar a autenticação

baseada em Forms

z Configurar o IIS para usar Anonymous

authentication z Alterar no Web.config z Configurar authorization z Construir um Form de autenticação 1 1 1 2 2 2 3 3 3 4 4 4 <authentication mode="Forms" > <forms name=".namesuffix" loginUrl="login.aspx" /> </authentication> <authentication mode="Forms" > <forms name=".namesuffix" loginUrl="login.aspx" /> </authentication>

(102)

z Referencia System.Web.Security

z Esta página verifica as credenciais do

utilizador

z Obter as credenciais a partir de uma cookie

z User.Identity.Name devolve o nome guardado por

FormsAuthentication.RedirectFromLoginPage

Criação da

Página de Autenticação

private void cmdLogin_Click(object sender, EventArgs e) {

if (login(txtEmail.Text, txtPassword.Text))

FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); }

private void cmdLogin_Click(object sender, EventArgs e) {

if (login(txtEmail.Text, txtPassword.Text))

FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); }

(103)

Autenticação com

Microsoft Password

Servidor Servidor Cliente Cliente Passport.com Passport.com O cliente faz um pedido ao servidor

1 1 1 2 2 2 3 3 3 4 4 4 5 5 5

O site redirecciona o cliente para Passport.com O cliente é redireccionado e autentica-se em

Passport.com

Passport devolve um cookie com um ticket de autenticação

6

6 6

O cliente acede de novo ao servidor mas agora com o ticket de autenticação

(104)
(105)

Mais Informação...

z MSDN Library

z http://msdn.microsoft.com/library

z .net framework center

z http://msdn.microsoft.com/netframework/

z C#

z http://msdn.microsoft.com/vcsharp/

z ASP.net

z http://www.asp.net

(106)

Tutoriais

z http://www.gotdotnet.com/

z http://www.w3schools.com/aspnet/

z http://www.asp-php.net/tutorial/asp.net/

(107)

Desenvolvimento

ASP.net

Paulo Proença

Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto

Referências

Documentos relacionados

Dos resultados obtidos por ambos os conjuntos de dados, pode ser observado que, se há a diminuição da sobreposição (aumento de ), o número de detectores também diminui, assim como

Ela determina, além da obrigatoriedade do exame toxicológico, o tempo máximo de direção, tempo de espera, descanso, jornada de trabalho e o seguro obrigatório ao

Figura 3.6: Restri¸c˜ ao de posicionamento em segmento de reta: (a) modelo de cˆ amera n˜ ao atendendo ` a restri¸c˜ ao; (b) transforma¸c˜ ao do estado inv´ alido para o estado

A partir de então, as doulas e as enfermeiras obstétricas reaparecem neste cenário buscando auxiliar essas mulheres no processo de parturição, utilizando métodos

De um modo geral, os problemas de interesse neste trabalho envolvem problemas de Otimização Combinatória conhecidos como NP-Difíceis, que são aqueles para os quais não se conhece

3 — São exceção ao disposto no número anterior, as reimportações referentes a anteriores importações que cum- priram o disposto no presente decreto -lei ou no Regulamento 4 —

Essa dissertação justifica-se por abordar um tema de relevância internacional, nacional e regional, por examinar os esforços da diplomacia brasileira na busca de maior

Como sugestão de novos estudos, indica-se a pesquisa com organizações de outros segmentos para identificar como se diferenciam as atitudes empreendedoras e as percepções dos