marcuswestin / store.js

Cross-browser storage for all use cases, used across the web.
MIT License
14.02k stars 1.33k forks source link

No fallback to memory storage above ~4kB in Safari private mode #221

Closed michael-bouvy closed 7 years ago

michael-bouvy commented 7 years ago

First of all thanks for the great work, this lib is very useful!

Method used to reproduce the bug in a clean Safari (10.0.2 / macOS Sierra) private mode window:

// Check lib works as expected
store.set('data', 'hello world');
store.get('data'); // hello world

// Try to store some data > ~4000 bytes (4100 in example below)
store.set('data', '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');

// Should return data set previously
store.get('data'); // undefined

Expected behaviour is use of memory storage when localStorage and cookie are not sufficient.

Running browser cookie limit test at http://browsercookielimits.squawky.net/ gives 4097 bytes as limit per cookie.

marcuswestin commented 7 years ago

I see. So you're saying that storage should change on a per-key basis?

Won't it be confusing if you store one key that does persist between page loads, and another key that doesn't (when the only difference between the two is the size of the value stores)?

marcuswestin commented 7 years ago

I'm thinking that the storage should instead throw if a value exceeds storage limits.

michael-bouvy commented 7 years ago

It would indeed be confusing. Is it possible to disable a specific storage? Thanks!

marcuswestin commented 7 years ago

You can create a custom build which only includes the storages you want to use: https://github.com/marcuswestin/store.js/blob/master/README.md#user-content-make-your-own-build On Tue, Mar 14, 2017 at 1:37 PM Michael Bouvy notifications@github.com wrote:

It would indeed be confusing. Is it possible to disable a specific storage? Thanks!

— You are receiving this because you commented.

Reply to this email directly, view it on GitHub https://github.com/marcuswestin/store.js/issues/221#issuecomment-286500447, or mute the thread https://github.com/notifications/unsubscribe-auth/AAIDf82BGr2TFJ_V4iTvRH1ZmrTMem4Pks5rltBAgaJpZM4Mc1ah .

michael-bouvy commented 7 years ago

Ok, I will do this. Thanks again Marcus!