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 Discussion :

Rediriger l'internaute vers une page de login lors de l'expiration de l'objet Session


Sujet :

ASP

  1. #1
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut Rediriger l'internaute vers une page de login lors de l'expiration de l'objet Session
    Bijour à tous

    J'ai une application qui créé une session par utilisateur connecté.
    Lorsque l'utilisateur est inactif pendant 30 min, la session s'arrête.

    Le truc est que lorsque la session se termine, ma page comprend encore les liens qui ne sont normalement pas accessibles si on est pas connecté.
    En fait, j'aimerais à la fin de la session rediriger l'utilisateur vers ma page d'accueil où il pourra se reconnecter s'il le souhaite.
    Genre éxécuter le script ci-dessous lorsque la session se termine mais je ne sais pas comment détecer la fin d'une session. C'est surtout ça mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript" language="javascript">
    <!--//
    	document.location.href="index.asp";
    //-->
    </script>
    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    L'objet session est un objet controlé sur le serveur.

    Si tu créés une variable de session comme Session("username") il te suffit de vérifier son contenu à chaque début de page. Si elle est vide alors tu rediriges vers la page d'authentification.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    En fait je vérifie déjà à chaque début de page si l'utilisateur à le droit d'accès.
    Mais si par exemple il se trouve sur une page "modification_de_donnees.asp" et qu'il reste inactif trop longtemps, il faudrait qu'il soit redirigé vers "index.asp".
    En fait le but de cette manoeuvre, c'est qu'un utilisateur connecté qui quitte son poste sans quitter l'appli ne puisse voir ses données modifiées par quelqu'un d'autre qui passait dans le coin.
    C'est pour ça que je pense que le seul évenement qui puisse me permettre de me rediriger vers mon index est la fin de session. Cependant je me demande si c'est possible...

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    c'est qu'un utilisateur connecté qui quitte son poste sans quitter l'appli ne puisse voir ses données modifiées par quelqu'un d'autre qui passait dans le coin.
    Je ne vois aucune parade à ça. S'il quitte son poste de travail avec un formulaire ouvert et que la session est encore active, les modifs peuvent être faites, par lui ou son collègue. Le problème est plus humain qu'informatique (tout le monde a des collègues qui viennent modifier nos données pendant qu'on va aux toilettes !! ). Ceci dit, il existe des boîtes dans lesquelles quitter son poste de travail en laissant une session ouverte (sur une appli, ou autre) est considéré comme faute grave.

    En ce qui concerne le problème de fin de session, la solution d'immobilis est la plus courante : à chaque début de page "protégée" :

    <% if Session("UserName")="" then response.redirect("login.asp") %>


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  5. #5
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    Merci pour vos réponses,

    Oui bon c'est vrai que le coup du mec qui change les données de son collègue pendant qu'il est en train de pisser n'est pas très courant

    De plus, il y a aussi windows qui se bloque au bout d'un certain temps mais pas mal de monde le désactive. justement parcqu'ils aiment bien ne pas avoir à se reconnecter en revenant à leur poste au bout d'une heure.

    Bref, vous avez raison, je me prend un peu le chou pour rien là. Mais bon je trouvait ça plus propre que lorsque la session est terminée, une page qui n'est normalement accessible que connecté ne soit plus à l'écran.

    Et puis c'est vrai que j'aurais bien satisfait ma curiosité en sachant comment lancer une procédure lorsqu'une session est détruite.

  6. #6
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Tu peux forcer le rafraichissement des pages au bout de Session.TimeOut + 1.

    Ainsi l'internaute inactif sera redirigé vers la page de login (1 est une valeur indicative).

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Mais bon je trouvait ça plus propre que lorsque la session est terminée, une page qui n'est normalement accessible que connecté ne soit plus à l'écran.
    ouais, mais le pb vient du fonctionnement d'ASP lui-même : ASP "envoie" le code HTML (+javascript + flash + ...) au navigateur, puis ... plus rien. Tu peux éteindre ton serveur, la page sera toujours affichée sur le navigateur client. c'est un mécanisme d'appel-réponse tout con, et l'état de session n'est revérifié qu'à l'appel (la "requête") suivante (par un fonctionnement proche de celui des cookies). En résumé, en ASP, on est jamais réèllement "connecté" au serveur .

    comment lancer une procédure lorsqu'une session est détruite.
    pour ça, voir la routine session_onEnd du global.asa. Attention : l'objets Response n'est pas accessible par le global.asa. De plus j'ai "ouï dire" (plutot "web lu", d'ailleurs, ou "forum cru comprendre") que l'appel du session_onEnd en ASP sous win 2003 (IIS6) ne se faisait pas (bug de IIS). A vérifier

    [EDIT] J'ai retrouvé le post : ici[EDIT]


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  8. #8
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    Yep, bon je viens de créer mon premier fichier "global.asa" et ça n'a pas l'air de fonctioner. J'y créé une variable de session pour tester que ça marche bien mais impossible de l'afficher dans mon index. La variable est vide.
    Et bien sur l'évenement Sesson_OnEnd ne marche pas non plus. Pourtant j'ai bien mis mon fichier à la racine de mon site.
    J'ai testé en VBScript et en Javascript (vu que l'objet Response est proscrit en VBScript).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script language="VBScript" runat="Server">
     
    Sub Session_OnStart
    	Session.TimeOut = 1
    	Session("test") = "TEST DE FOU"
    End Sub
     
    Sub Session_OnEnd
    	'Pas d'objet Response alors peux rien faire :(
    End Sub
     
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script language="JavaScript" runat="Server">
     
    function Session_OnStart()
    	{
    		Session.TimeOut = 1;
    		Session("test") = "TEST DE FOU";
    	}
    function Session_OnEnd()
    	{
    		document.location.href = "index.asp";
    	}
     
    </script>
    Je vais continuer mes recherches mais bon avec moi en développement, même le truc de base, la première fois ça marche jamais. Faut que je change de métier lol.

  9. #9
    vva
    vva est déconnecté
    Membre averti Avatar de vva
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 463
    Points : 447
    Points
    447
    Par défaut
    heu pas bien certains que le js fonctionne dans un global.asa.

    tu peux remplacer cela par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.redirect "url"
    maintenant je ne vois pas comment le serveur iis va faire un redirect dans le session end car le serveur iis travaille quand tu lui envoies une requête mais sinon il reste inactif. je ne pense pas qu'il soit consus pour scanner toutes les sessions et faire une redirection si tu n'es pas revenu depuis 20 mn il n'a aucun intérêt à le faire car tu peux très bien être parti de ce site donc toutes les 20 minutes il va essayer de te renvoyer sur sa page d'accueil et ainsi garder en mémoire constamment ta session ! heu c'est pas très cool pour le serveur qui va vite saturer. c'est une vis sans fin cette histoire. dès qu'une session est ouverte sur le serveur elle sera regénérée en permanence

    donc si je résume la situation :
    1 j'ouvre ton site et il me crée une session 1
    2 je vais sur un autre site et je ferme mon navigateur.
    3 le iis toutes les vingt minutes me redirige sur sa page d'accueil pour rafraichir la session 1
    4 je rouvre mon navigateur et je vais sur ton site là il y a fort à parier qu'il ouvre une session 2 qu'il va rafraicir en permanence--waow
    5 nous avons le regret de vous annoncer que le serveur se sent mal


    si tu veux vraiment travailler avec un rafraichissement regarde plutôt pour incérer un code de traitement à l'ouverture de tes pages du genre

    je rentre sur index.asp
    session("Heure_open") = time()


    ouverture page 2
    test la variable de session("Heure_open") si vide
    si oui response.redirect sinon on continue

    voilà en gros ce que je ferai par pitié pour le serveur

  10. #10
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    heu pas bien certains que le js fonctionne dans un global.asa.
    Si, si !

    L'objet response n'est pas proscrit en vbscript, il est inaccessible par le global.asa. (quelque soit le langage).

    Par contre, tu confonds un peu tout, là :

    function Session_OnEnd()
    {
    document.location.href = "index.asp";
    }
    le global.asa, c'est du coté SERVEUR. document, c'est du javascript CLIENT. Tu peux executer une routine en fin de session, mais tu ne redirigeras pas ton internaute vers une autre page en fin de session (en aucune manière)

    Dernier petit truc : la modif du global.asa fait redémarrer ton appli (donc perte de toutes les sessions en cours). la routine Application_onStart n'est appelé qu'à l'appel de la première session (et non pas immédiatement).

    même le truc de base, la première fois ça marche jamais
    T'inquiètes, tu n'est pas le premier, tu n'es pas le dernier


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  11. #11
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    L'objet response n'est pas proscrit en vbscript
    Yep, je parlais du VBScript dans le global.asa. C'était justement pour ça que je pensais outrepasser mon problème en utilisant le JavaScript.

    J'ai moi aussi trouvé bizard de faire du javascript coté serveur. Mais il y a des exemples sur le net où les mecs configurent leur global.asa en Javascript. Et j'ai déjà vu des pages asp où l'entête n'était pas JScript mais bien JavaScript. Je ne sais pas l'expliquer mais je l'ai bien vu. D'ailleur même dans DreamWeaver, on a le choix antre deux options lorsqu'on créé une page ASP : VBScript ou JavaScript. Le JScript n'étant même pas proposé.
    Pour moi, JavaScript et JScript, c'était pareil sauf qu'il y en avait coté serveur et l'autre côté client. Mais tous ces nouvaux éléments font que c'est moins clair qu'avant dans ma tête lol.

    Bon en tout cas je lache l'affaire avec ma redirection vu que ce n'est possible en aucune manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tu confonds un peu tout
    C'est tout à fait ça

    Encore merci pour vos réponses très complètes !!

  12. #12
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    le iis toutes les vingt minutes me redirige sur sa page d'accueil pour rafraichir la session 1
    Je parlais d'être redirigé vers l'index, mais il fallait à nouveau cliquer sur un lien pour recréer la session.

    ouverture page 2
    test la variable de session("Heure_open") si vide
    si oui response.redirect sinon on continue
    Yep, c'est comme ça que ça va se finir...

    Tu peux forcer le rafraichissement des pages au bout de Session.TimeOut + 1
    là par contre j'avoue ne pas trop comprendre comment procéder.

  13. #13
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Attention,

    Quand tu fais :

    Session.TimeOut = 1;
    Tu redéfinis la durée de la session à 1 minute au lieu de 20 par défaut.

  14. #14
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    Oouep, c'était juste pour pouvoir faire des test sur l'évenement Session_OnEnd() sans attendre 20 min justement

  15. #15
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    Bon je vais mettre le post en résolu même si c'est pas trop le cas (n'ayant pas réussi à détecter cette fichue fin de Session).
    En gros, la réponse est déjà dans le deuxième post d'Immobilis

    A+ les gazous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rediriger l'internaute vers une langue par défaut
    Par jamdinhe dans le forum Apache
    Réponses: 0
    Dernier message: 02/10/2014, 14h12
  2. Réponses: 1
    Dernier message: 22/04/2014, 20h01
  3. Réponses: 2
    Dernier message: 05/08/2012, 17h10
  4. Rediriger vers une page de login quand timeout de session
    Par Tail dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 18/09/2008, 12h43
  5. Rediriger les répertoires vers une page
    Par Alexandre T dans le forum Struts 1
    Réponses: 3
    Dernier message: 20/09/2007, 18h27

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