Я такое делаю на юзерскриптах (GreaseMonkey). Кроме всегда доступного localStorage и куки, у GreaseMonkey есть еще и собственное API для хранения значений в базе (отдельная база для каждого юзерскрипта): GM_getValue/GM_setValue. Плюс в то, что после того, как очищаются все куки localStorage (против отслеживания со стороны скриптов на странице), базы моих юзерскриптов остается нетронутыми. Можно вести любую статику или хранить крупные объекты (картинки в бинарном виде, например), база на движке SQLite позволяет и это.