2012-12-21 1 views
1

Je construis un site web simple pour mon usage familial, en utilisant Azote/Inets. La version actuelle fonctionne comme prévu tant que je n'ai qu'un seul client connecté au serveur Web.Comment gérer plusieurs utilisateurs en azote/inets erlang

Si je tente de connecter un nouvel utilisateur, les 2 sessions semble partager les mêmes variables d'état:

  • navigateur 1: lire la page d'index, cliquez sur connexion et se connecter en tant user1.
  • navigateur 2: lire la page d'index, l'utilisateur est utilisateur1 -> pas OK - aller à la connexion et entrez comme utilisateur2. Semble ok.
  • navigateur 1: recharger la page d'accueil -> utilisateur a changé à utilisateur2 -> très mauvais: o (

en plus j'ai inclus un écran pour afficher le compteur de délai d'attente -> les valeurs sont synchronisées sur . both navigateur

Pouvez-vous me dire ce que je dois faire pour gérer plusieurs utilisateurs en même temps le code i écrit est le suivant:

extrait de index.erl

header() -> 
% if the user is not defined, show in the header a button to connect, change the title and display a reduced menu (thanks to common module) 
% if the user is defined, show in the header a button to disconnect, change the title and display a complete menu (thanks to common module) 
    User = wf:user(), 
    Msg = case User of 
     undefined -> 
      "Pas connecté"; 
     User -> 
      "Welcome " ++ User 
    end, 
    case User of 
     undefined -> 
      common:header(Msg, #button { id=dcnx, text="Connexion", postback=connexion , class = rightalign}); 
     User -> 
      common:header(Msg, #button { id=dcnx, text="Deconnexion", postback=deconnexion , class = rightalign}) 
    end. 


body() -> 
    #container_12 { body= #grid_8 { alpha=true, prefix=2, suffix=2, omega=true, body=inner_body(wf:user()) }}. 

inner_body(User) -> 
    Msg = case User of 
     undefined -> "Pas connecté"; 
     _ -> User ++ " home" 
    end, 
    [ 
     #h2{ text= Msg }, 
     #p{} 
    ]. 

event(deconnexion) -> 
    % a temporary popup just to display the user name and check the function call 
    wf:wire(#alert { text="Bye bye " ++ wf:user() }), 
    wf:clear_session(), % erase the session information 
    wf:redirect("index"); % redisplay the index page 
event(connexion) -> 
    wf:redirect_to_login("login"); 

event(E) -> common:event(E). 

extrait de login.erl:

body() -> 
% the login requires a name and a password, 
% checks that {name,password} exists 
     Body = [ 
      #label { text="Name" }, 
      #textbox { id=nameTextBox, next=passwordTextBox }, 

      #p{}, 
      #label { text="Password" }, 
      #password { id=passwordTextBox, next=continueButton }, 

      #p{}, 
      #button { id=continueButton, text="Continue", postback=continue } 

    ], 
    wf:wire(continueButton, nameTextBox, #validate { validators=[ 
     #is_required { text="Obligatoire." }, 
     #custom { text="utilisateur invalide.", tag=tag_name, function=fun name_validator/2 } 
    ]}), 

    wf:wire(continueButton, passwordTextBox, #validate { validators=[ 
     #is_required { text="Obligatoire." }, 
     #custom { text="mot de passe incorrect.", tag=tag_password, function=fun password_validator/2 } 
    ]}), 

    Body. 

event(continue) -> 
    Name = wf:q(nameTextBox), % retreive the name 
    wf:user(Name), % define as user 
    wf:role(admin,is_admin(Name)), % define role 
    wf:session(logged,true), % define as logged 
    wf:redirect_from_login("index"); % go back to the calling page or index if not defined 

event(_) -> ok. 

Répondre

2

Les informations de session est enregistrée avec un cookie comme la clé.

Ouvrez-vous la page dans une autre fenêtre du même navigateur ou ouvrez-vous un navigateur complètement différent (IE, Chrome et Firefox)? Si vous ouvrez simplement une autre fenêtre ou un autre onglet dans le même navigateur, les informations sur les cookies vont certainement être partagées, ce qui conduit à l'effet que vous avez décrit. Par conséquent, assurez-vous de lancer deux navigateurs complètement différents.

Le code que vous avez posté semble correct - rien ne ressort comme le partage d'informations entre les sessions.

+0

Merci côtelettes, je testais le code à partir de 2 onglets du même navigateur. J'ai fait le test de 2 navigateurs différents sur le même PC et ça va. BTW, je n'imaginais pas avoir de problème là-bas car c'est quelque chose que je fais avec succès lors de la connexion à google avec différents identifiants ... – Pascal

+0

Je suis content d'entendre que c'est tout ce que c'était. – chops

Questions connexes