IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#] Comment changer Session.Timeout ?


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Par défaut [C#] Comment changer Session.Timeout ?
    Bonjour,

    mon problème initial est de fermer une connexion à une base de données lorsque je quitte une page, or cette page se recharge plusieurs fois (plusieurs postbacks du composant Crystal reports viewer en l'occurence). Donc je ne peux pas faire ce qui est indiqué ici : http://dotnet.developpez.com/faq/asp...#fermersession

    Je voudrais donc simplement changer mon timeout de session quand je quitte ma page, c'est à dire sur l'événement javascript onbeforeunload.

    J'ai déjà essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <HEAD><script language="C#" runat="server">
    	void SetTimeout() 
    	{ Session.Timeout = 5;}
    	</script>
    </HEAD>
    <body onbeforeunload=SetTimeout()">
    mais il ne se passe rien...
    Est-ce que je peux bien accéder à la variable Session dans la page aspx ?

    sinon, comment faire pour exécuter une méthode de mon .cs sur un événement javascript ?

    merci .

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Si tu ne peux utiliser ce qui est marqué sur la faq, je doute que tu puisses exeuter ton script.

    En effet, tu fais appel a une fonction serveur, donc que tu lui demande dans la meme page de faire redirect vers une page de deconnection ou que tu lui demandes directement de mettre un timeout plus court à ta session , va revenir au même.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Par défaut
    Non, ça ne revient pas au même : si je mets un Timeout à 5 minutes sur l'événement onbeforeunload, et un Timeout à 240 dans le Page_Load par exemple, cela laisse le temps à l'utilisateur de choisir des valeurs dans des listes (ces valeurs viennent d'une base, c'est pour cela que j'ai besoin de garder la connection active). Une fois que les valeurs sont choisies, le rapport Crystal s'affiche (toujours dans la même page aspx) et la session reste active tant que la page est affichée. Je ne veux surtout pas abandonner la session tout de suite après un unload de la page.
    Si l'utilisateur change de page ou ferme son explorer, sa session se ferme, et les connections à la base sont proprement fermées aussi.

    Dites moi si je ne suis pas assez clair, ça m'arrangerait vraiment de trouver une solution...

  4. #4
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    je crois que moi aussi je me suis mal expliqué. On va reprendre au début alors.

    Je ne suis pas un expert, mais je trouve bizarre que tu accèdes à un script serveur à partir de ta page cliente javascript. Cela n'est normalement pas faisable. Si tu veux acceder a des proprietes et des fonctions coté serveur depuis ta page html, tu es obligé de faire une fonction javascript avec un submit pour reinterroger ton serveur.

    A ce moment là, le serveur prendra note de ta demande et pourra executer la focntion code behind que tu souhaites.

    Autre point : pourquoi chercehs tu a fermer une connection à ta base de données a posteriori. Le plus simple est tout de meme de se connecter au debut de ta page et de fermer cette connection a la fin de ton script coté serveur. Tu peux restreindre cette fenetre en l'adaptant à ton code , mais laissez une conenction ouverte est assez peu orthodoxe je trouve.

    Si je devais faire qqchose comme ça voilà ce que je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <HEAD>
    <SCRIPT langage=javascript>
     
    	void FindeSession() 
    {
    window.location.href="disconnect.aspx";
    }
    	</script>
    </HEAD>
    <body onbeforeunload=FindeSession()">
    et dans le code behind de ta page disconnect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monObjetConnection.close();
    En esperant t'avoir aidé...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Par défaut
    Merci de continuer à creuser....

    je ne peux pas faire ce que tu dis (renvoi sur une page de déconnexion) car ma page fait plusieurs allers-retours vers le serveur, dus au composant Crystal Report. Je peux savoir si ma page se charge pour la première fois (IsPostback) mais impossible de savoir si c'est la dernière !
    Je pense avoir trouvé la solution en faisant appel à un postback d'un faux bouton (invisible sur la page). Je n'ai pas encore réussi à faire un postback sans faire appel à un contrôle, j'ai dû rater un truc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script language="javascript">
    function window_onunload()
    {
    	__doPostBack('ImageButtonFake','')		
    }		
    </script>
     
    <body language="javascript" onbeforeunload="window_onunload()">
    et dans mon code-behind:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private void ImageButtonFake_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
    	Session.Timeout = 5;
    }
     
    et dans Global.asax :
    protected void Session_End(Object sender, EventArgs e)
    {
    ...
    	ReportClass crReport = (ReportClass) currentReport.CRReport;
     
    	crReport.Close();
    	_log.Info("Session end ...");
    }
    J'ai l'impression que ça marche...
    A++

  6. #6
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Si ca marche.. . C'est le principal

    Bonne fin de journée


    Arthis

    PS : il y a quand même deux trois trucs que j'ai pas compris dans ton histoire mais on verra ca une prochaine fois.

Discussions similaires

  1. Comment changer la langue AVANT le login de session ?
    Par Doudy dans le forum Windows Vista
    Réponses: 1
    Dernier message: 01/11/2010, 09h03
  2. Comment changer la variable 'delayed insert timeout'
    Par CinePhil dans le forum Outils
    Réponses: 0
    Dernier message: 20/02/2008, 11h07
  3. Comment changer le mot de passe de session Windows ?
    Par jmjmjm dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 15/11/2007, 07h00
  4. Comment changer le mot de passe de session Windows ?
    Par jmjmjm dans le forum Langage
    Réponses: 0
    Dernier message: 13/11/2007, 14h11
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo