the built in $http cache isn't at all suitable for what i described.
I do currently use angular-cache (from the author of angular-data) and build on top of that.
I specifically need to invalidate the storage if the user is different, the server generated session id is different or if the app version has changed since the last page load.
this is a service called UserStorage which can safely be used knowing that it gets dumped if somebody tries to mess with the user or they just logged out/in.
the site I built this for is not a single page app, people load pages often. persistence is essential.
the whole site appears to be server side personalized with menus, saved notes added to property listings etc. but its all frontend enhancement and the server can cache all the pages.