FAQ ASP.NET/C#
FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
Dans certains cas, il est important pour l'utilisateur d'être averti que sa session va bientôt se terminer, par exemple lorsqu'il peut encoder des informations.
Un exemple complet où l'utilisateur est juste averti du temps restant:
<%@ Page Language
=
"C#"
AutoEventWireup
=
"true"
CodeFile
=
"Default.aspx.cs"
Inherits
=
"_Default"
%>
<!
DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<html xmlns
=
"http://www.w3.org/1999/xhtml"
>
<head runat
=
"server"
>
<title>Untitled Page</title>
<script type
=
"text/javascript"
>
function temps_deco
(
)
{
value =
document
.getElementById
(
'timeOut'
).
innerHTML;
value =
value-
1
;
document
.getElementById
(
'timeOut'
).
innerHTML =
value;
if (
value ==
120
)
document
.getElementById
(
'expired'
).
style.
display =
'block'
;
// on peut également imaginer de faire un retour serveur (__doPostBack)
else
setTimeout
(
"temps_deco()"
,
1000
);
}
</script>
</head>
<body>
<form id
=
"form1"
runat
=
"server"
>
<div align
=
"center"
>
Votre session va se terminer dans <asp:
Label runat
=
"server"
ID
=
"timeOut"
/>
secondes.<br/>
Nous vous conseillons donc d'enregistrer les informations fournies...<br/>
Vous realiserez donc une sauvegarde et une continuité de votre session.
</div>
<div id
=
"expired"
style
=
"display: none;"
>
Attention: La session se termine dans moins de 2 minutes</div>
</form>
<script type
=
"text/javascript"
>
temps_deco
(
);
</script>
</body>
</html>
et dans le Page_Load:
protected
void
Page_Load
(
object
sender,
EventArgs e)
{
timeOut.
Text =
(
Session.
Timeout*
60
).
ToString
(
);
}
Il faut tout d'abord intercepter l'événement sur le client. Pour cela, incluez dans le header de vos pages le script suivant:
<
script id=
"clientEventHandlersJS"
language=
"text/javascript"
>
<--
function window_onbeforeunload
(
)
{
window
.navigate
(
'disconnect.aspx'
);
}
//-->
</
script>
Ensuite, il faut changer le tag body:
<body language
=
"javascript"
onbeforeunload
=
"return window_onbeforeunload()"
>
A la fermeture du navigateur, la fontion javascript window_onbeforeunload est appelée et la page disconnect.aspx est chargée. Il ne reste plus qu'à fermer la session dans le Page_Load de cette page.
private
void
Page_Load
(
object
sender,
System.
EventArgs e)
{
Session.
Abandon
(
);
}