(defpackage #:clog-user (:use #:cl #:clog) (:export start-tutorial)) (in-package :clog-user) (defun on-new-window (body) (set-on-click (create-button body :content "Set Local Key") (lambda (obj) (setf (storage-element (window body) :local "my-local-key") (get-universal-time)) (reload (location body)))) (set-on-click (create-button body :content "Set Session Key") (lambda (obj) (setf (storage-element (window body) :session "my-session-key") (get-universal-time)) (reload (location body)))) (set-on-storage (window body) (lambda (obj data) (create-div body :content (format nil "
~A : ~A => ~A
" (getf data ':key) (getf data ':old-value) (getf data ':value))))) (create-div body :content (format nil "

Local Storage vs Session Storage

The value of local storage persists in browser cache even after browser closed. If you reset this page the session storage key will remain the same, but openning in another window or tab will be a new session but if came from a click from this window the session keys are copied first to the new window.


Another Window = Different Session


Local Storage key: ~A := ~A

Session Storage key: ~A := ~A

Changes made to a local key will fire an event and print below:
" "my-local-key" (storage-element (window body) :local "my-local-key") "my-session-key" (storage-element (window body) :session "my-session-key"))) (run body)) (defun start-tutorial () "Start turtorial." (initialize #'on-new-window) (open-browser))