• Aucun résultat trouvé

Il y aura un seul objet "Application"

commun à tous les utilisateurs du site mais trois objets "Session" correspondant chacun à un utilisateur

Évènements particuliers

Evénement Description

Application_Star

t Exécuté lors du premier appel à une page du site depuis le démarrage de IIS

Application_End

Appelé lorsque l'application se termine, cela ne signifie pas que IIS s'arrête mais est d'office appelé si, pour une raison quelconque, IIS est arrêté

Session_Start Appelé lors de chaque nouvelle session d'un navigateur client

Session_End Fin de session : lors d'un timeout ou lors d'une destruction explicite (Session.Abandon()) via un lien "Log Out" par exemple

Développer des composants serveur

PostBack : génère un appel au serveur

IsPostBack est une propriété booléenne de la page (read-only) qui permet justement d'effectuer ce genre de test

AutoPostBack est une propriété des contrôles qui active le déclenchement d'un aller-retour sur le serveur (prend la valeur true ou false)

Évènements particuliers

Développer des composants serveur

Lorsqu’un utilisateur sera logué sur notre application, il devra être connu sur toutes les pages qu’il visitera

Il existe plusieurs solutions pour arriver à cet objectif:

Passage d’arguments à une url

Les variables de session

Les variables d’application

Les variables de session et d’application

Développer des composants serveur

Passage d’arguments à une url

Il s’agit d’appeler la page cible en lui passant des paramètres et leurs valeurs correspondantes

Pour rediriger le navigateur vers une page web

Pour récupérer la valeur du paramètre envoyé

Il est quand même inconcevable de passer à chaque page le login et le mot de passe

Nous allons donc améliorer ces pages afin d’en faire quelque chose de plus sécurisé et facilement utilisable

Les variables de session et d’application

Response.Redirect("Page2.aspx?

n="+TextBox1.Text);

Request.Params["n"]

OuRequest.QueryString[" n "];

Développer des composants serveur

Les variables de sessions

Les variables de session sont stockées en mémoire sur le serveur et sont accessibles par toutes les pages web associées à cette session

Il peut y avoir autant de variables de session que l’on désire, cependant en augmentant le nombre de variables utilisées, ce sont souvent les performances qui sont en chute libre : il faut donc trouver le juste milieu entre performances et facilité

Les informations utilisées de manière répétée, si elles n’ont pas un trop haut coût en mémoire, peuvent donc être stockées dans ce type de variables (par exemple : le UserName d’un utilisateur)

Les variables de session et d’application

Développer des composants serveur

Les variables de sessions

Ces variables sont accessibles du début à la fin de la session d’un navigateur

Comme pour le passage d’arguments dans l’url, les variables de session ne doivent pas être déclarées

Afin de ne pas surcharger le serveur et sa mémoire, nous considérons que si la variable de session est initialisée, c’est que l’utilisateur est bien logué

Les variables de session et d’application

Session["user"]= TextBox1.Text

Label1.Text="L’utilisateur connecté est" + Session["user"].ToString()

Développer des composants serveur

Les variables d’application

Les variables de session ne peuvent être accédées que pour une session, on peut cependant imaginer vouloir partager des informations entre les différents navigateurs clients (trouver la liste des utilisateurs connectés)

La syntaxe et l’utilisation des variables d’application sont les mêmes que pour les variables de sessions si ce n’est que ces variables sont accessibles par toutes les sessions, il est donc possible de les faire communiquer

Un exemple simple et fréquent que l’on trouve au travers du net est le nombre d’utilisateurs connectés et identifiés

Les variables de session et d’application

Développer des composants serveur

Les variables d’application

Dans la partie qui valide la connexion, il faut rajouter le code suivant:

La variable Application["NbUsers"] peut être donc utilisée là où il le faut

Les variables de session et d’application

Application.Lock();

if (Application["NbUsers"]==null) Application["NbUsers"] = 1;

else

Application["NbUsers"] =

(int)Application["NbUsers"] + 1;

Application.UnLock();

Développer des composants serveur

Nouveau concept introduit par Microsoft avec ASP.NET, représente l'état de l'ensemble des contrôles d'une page

Les informations sont sauvées sous forme d'un flux sérialisé dans la page HTML et le champ caché _VIEWSTATE permet le transit de ces informations entre le client et le serveur

Il peut être désactivé au niveau d'un contrôle, au niveau d'une page ou au niveau d'une application en plaçant la propriété EnabledViewState à False

Les ViewStates

Développer des composants serveur

Le plus intéressant est que le programmeur peut y ajouter ses propres informations sous forme d'objets indexés par une clé de type String

Pour sauvegarder et lire une information, voici comment utiliser le ViewState, par exemple pour modifier un argument dans une requête de sélection:

Les ViewStates

void ConstruireRequete() {

String tri = (String)(ViewState["tri"]);

String rq = "SELECT * FROM UneTable ORDER BY

" + tri;

}

Développer des composants serveur

Les ViewStates

protected void Page_Load(object sender, EventArgs e) {

if (! IsPostBack) {

ViewState["tri"] = "nom";

ConstruireRequete();

} }

protected void cmdVille_Click(object sender, EventArgs e)

{

ViewState["tri"] = "ville";

ConstruireRequete();

}

Développer des composants serveur

Les cookies permettent aux applications Web de stocker des informations spécifiques à l'utilisateur

Par exemple, lorsqu'un utilisateur demande une page de votre site, si votre application envoie, en plus de la page, un cookie contenant la date et l'heure, le navigateur de l'utilisateur récupérera la page plus le cookie, qu'il stockera dans un dossier du disque dur local

Ultérieurement, si l'utilisateur demande à nouveau une page de votre site, le navigateur recherchera sur le disque dur local un cookie associé à l'URL saisie

Les cookies

Développer des composants serveur

Si le cookie existe, le navigateur l'enverra à votre site en même temps que la demande de page

Votre application pourra alors déterminer la date et l'heure auxquelles l'utilisateur a visité le site pour la dernière fois

Vous pourrez éventuellement utiliser cette information pour afficher un message sur l'écran de l'utilisateur ou vérifier une date d'expiration

Les navigateurs limitent le nombre de cookies que votre site peut stocker sur l'ordinateur de l'utilisateur

Les cookies

Développer des composants serveur

En plus d'utiliser des contrôles serveur Web dans vos pages Web ASP.NET, vous pouvez créer vos propres contrôles personnalisés et réutilisables

Des contrôles utilisateur (UserControl) : des conteneurs dans lesquels vous pouvez placer des balises et des contrôles serveur Web. Vous pouvez ensuite traiter le contrôle utilisateur comme une unité et lui assigner des propriétés et des méthodes.

Des contrôles personnalisés (CustomControl) : classes que vous écrivez et qui dérivent de Control ou de WebControl

Contrôles utilisateur

Développer des composants serveur

Un contrôle utilisateur porte l’extension

« .ascx »

Il s’agit d’une mini page (.aspx) qui peut s'inclure dans une page et qui ne comporte aucune des balises suivantes :

<html><body><form>

Un contrôle utilisateur a pour directive <

%@ Control > au lieu de la directive <%@

Page >

Les contrôles utilisateur ne peuvent pas s'exécuter comme des fichiers autonomes, il faut plutôt les ajouter à des pages ASP.NET, comme pour n'importe quel contrôle

Contrôles utilisateur

Développer des composants serveur

Pour utiliser un contrôle utilisateur dans sa page, il faut utiliser la directive @Register pour faire connaitre le contrôle utilisateur à la page

<%@ Register Src="~/monUserControl.ascx"

TagName="MonUserControl" TagPrefix="UC"

%>

L’attribut Src définit le chemin d'accès virtuel au fichier contrôle utilisateur que vous incluez

L’attribut TagName associe un nom au contrôle

Développer des composants serveur

Pour l'insérer alors dans sa page (dans un emplacement précis) on utilisera la combinaison TagPrefix:TagName

<UC:MonUserControl runat="server" />

Dans le corps de la page Web, déclarez l'élément contrôle utilisateur à l'intérieur de l'élément form

L'exemple suivant montre un contrôle utilisateur dans lequel les utilisateurs peuvent cliquer à leur guise sur deux boutons pour naviguer dans une série de choix (de couleurs) au sein d'une zone de texte

Contrôles utilisateur

Développer des composants serveur

Contrôles utilisateur

protected string[] colors = { "Red", "Green", "Blue", "Yellow",

"Black" };

protected int indiceCouleur = 0;

protected void afficheCouleur() {

TextBox1.Text = colors[indiceCouleur];

}

protected void Page_Load(object sender, EventArgs e) {

afficheCouleur();

}

Développer des composants serveur

Contrôles utilisateur

protected void Button1_Click(object sender, EventArgs e) {

if (indiceCouleur == 4) indiceCouleur = -1;

indiceCouleur++;

afficheCouleur();

}

protected void Button2_Click(object sender, EventArgs e) {

if (indiceCouleur == 0) indiceCouleur = 5;

indiceCouleur--;

afficheCouleur();

}

Développer des composants serveur

Le code ne marche pas convenablement

Il faut rajouter un élément qui inspecte l’état de la variable «  indiceCouleur » depuis et vers le serveur (ViewState)

Contrôles utilisateur

<asp:Label ID="Label1" runat="server" Text="Liste des couleurs"></asp:Label>

&nbsp;&nbsp;&nbsp;&nbsp;

<asp:TextBox ID="TextBox1" runat="server"

ReadOnly="True"></asp:TextBox>

&nbsp;&nbsp;&nbsp;

<asp:Button ID="Button1" runat="server" onclick="Button1_Click"

Text="^" />

&nbsp;&nbsp;&nbsp;

<asp:Button ID="Button2" runat="server" onclick="Button2_Click"

Text="v" />

Développer des composants serveur

Contrôles utilisateur

protected string[] colors = { "Red", "Green", "Blue", "Yellow",

"Black" };

protected void Page_Load(object sender, EventArgs e) {

Développer des composants serveur

Contrôles utilisateur

protected void Button1_Click(object sender, EventArgs e) {

protected void Button2_Click(object sender, EventArgs e) {

Développer des composants serveur

Créer une page de connexion (login+mot de passe)

Une connexion réussie vous mène vers une page où vous indiquez le nom de l’utilisateur logué (variable de session), et le nombre d’utilisateurs connectés (variable d’application).

La page doit contenir également un UserControl qui permet de faire des calculs de base.

TP1:

Développer des composants serveur

TP1:

Documents relatifs