Sauvegarder une Session

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sauvegarder une Session

Re: Sauvegarder une Session

par moogli » 25 oct. 2016, 10:29

non, mais relativement simple à mettre en place
une table, disons context :
create table contexte (
ctx_id int not null,
user_id int not null,
page varchar(250) not null,
context clob not null
);
alter table contexte add constraint PK_contexte primary key (ctx_id);
alter table contexte add constraint FK_user_ctx foreing key (user_id) references user(user_id);
il te faut gérer l'incrément de la clef primaure (auto_increment pour mysql, type serial pour postgres ou une sequence et un trigger before insert pour tout le monde ;) ).

donc avec sa tu insères
- user_id : l'id utilisateur (que tu dois avoir en session une fois connecté)
- page : la page où se trouve l'utilisateur, c'est quelque chose d'unique qui doit te permettre de retrouver le contexte simplement (cela peux être une fk vers une autre table qui référence les pages qui utilise le contexte).
- contexte : les choses que tu souhaites pouvoir réemployer sur la page (j'ai uen très grosse préférence pour la sérialisation json mais une sérialisation php simple est tout à fait utilisable).

lorsque tu affiches la page, tu fait un simple select sur la table contexte
select contexte from context where userid=42 and page='la page actuelle';
42 : à remplacer par l'id utilisateur en session, et le nom de la page par la page actuelle :)
Il est très intéressant de créer une fonction pour cela genre
<?php
function getPageContext($sqlCnx,$userId,$page) {
// recherche sql en fonction de ce que tu utilise pour te connecter à la base. 
tu vas compter le nombre de retour (1 ou zéro)
si c'est zéro tu retourne false sinon le contexte, ou mieux un objet php qui contient le contexte. 
}
ensuite sur les pages tu utilises le contexte pour remettre la page comme elle était la dernière fois qu'elle a été enregistré.

voilà tu sais maintenant comment remettre une page à état précis.
C'est bien tout ça mais comme enregistrer cet état ?

et bien la tu va devoir faire un peu de javascript et un service rest ;)
coté php c'est simple, il faut un script qui prend en paramètre la page et le context et va insérer ou mettre à jour la table contexte (et sérialiser le contexte).

coté js il faut une fonction qui récupère ce que tu souhaites sauver et qui l'envoi coté serveur (requête serveur de type POST, une requête "ajax").
et pour le coté automatique la fonction javascript setinterval va utiliser ta fonction de sauvegarde de contexte et le faire toutes les x secondes (pas toutes les secondes c'est une coup à saturer ton serveur tous seul pour rien https://www.commitstrip.com/fr/2015/07/ ... self-ddos/ :-) ).

je crois que j'ai fais le tour, tu as en plus une ressource de lecture pour te détendre ;)
et comme je suis sympa tu as des notions sympa comme rest ou sérialisation qui vont t'occasionner un peu de recherche si tu ne connais pas encore.
je t'invite, autant en php qu'en javascript, à créer des fonctions générique tu auras à simplement utiliser.
cela va te permettre d'avoir juste la fonction de sauvegarde du contexte à mettre en place coté js pour chaque page (le mieux c'est une fonction anonyme dans une variable qui sera utilisée dans le setinterval).


@+

Re: Sauvegarder une Session

par Henrigo » 24 oct. 2016, 16:08

salut,

cela dépends de ce que tu veux exactement.
il est possible de stocker dans le "localstorage" les informations que tu souhaites réafficher.

Si tu veux que cela soit possible entre différente machines il faut que tu stock tout en base et lors de la reconnexion afficher les bonnes informations (la bonne page etc).
suivant les besoins une table avec une colonne pour la page à afficher.
ensuite il est possible d'avoir un champs avec les données sérialisées dedans qui va te permettre de remettre la page dans l'état avant la déconnexion.
cela impose aussi que tu fasses régulièrement des requêtes serveur pour sauver l'état de tes pages.
il existe aussi l'event onunload mais le comportement n'est pas le même sur ton les navigateur (par exemple pas de requête serveur possible pour chrome).

@+
Salut Moogli,

c'est exactement le stockage sous la base qui m'interesse car plusieurs utilisateur pourrons utiliser la page parallelement.
ne connais-tu pas un lien ou un livre qui expliquerai cela ?
Meric bien
a+

Re: Sauvegarder une Session

par moogli » 24 oct. 2016, 12:58

salut,

cela dépends de ce que tu veux exactement.
il est possible de stocker dans le "localstorage" les informations que tu souhaites réafficher.

Si tu veux que cela soit possible entre différente machines il faut que tu stock tout en base et lors de la reconnexion afficher les bonnes informations (la bonne page etc).
suivant les besoins une table avec une colonne pour la page à afficher.
ensuite il est possible d'avoir un champs avec les données sérialisées dedans qui va te permettre de remettre la page dans l'état avant la déconnexion.
cela impose aussi que tu fasses régulièrement des requêtes serveur pour sauver l'état de tes pages.
il existe aussi l'event onunload mais le comportement n'est pas le même sur ton les navigateur (par exemple pas de requête serveur possible pour chrome).

@+

Sauvegarder une Session

par Henrigo » 24 oct. 2016, 11:39

Salut à tous,

j'ai une question concernant la sauvegarde d'une Session, du genre si l'utilisateur decide d'interumpre sa session et aimerai sauvegarder les données toutes les données toutes ces données, et ensuite il peut se deconnecter, lorsqu'il revient et se connecte a nouveau qu'il puisse continuer sa session.
quelqu'un aurai un lien qui explique cela ? ou un Livre ?

merci bien