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.
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
Je suis content d'entendre que c'est tout ce que c'était. – chops