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>
<asp:TextBox ID="TextBox1" runat="server"
ReadOnly="True"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
Text="^" />
<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: