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).
@+