前の記事で書いたログアウト後に localStorage が残る問題
対処するならどうするのがいいのかなと考えたところ ユーザーの key で暗号化して保存するのが一番かなと思います
暗号化しておけば別ユーザーでログインしてアクセスしたときに復号に失敗するので無視して復元なしになります
単純にログアウト時にクリアということも考えられますが Cookie のセッションや時間切れによる自然ログアウトという可能性もありえます
この場合は localStorage にデータは残ったままです
ログイン時に前回のログインユーザーと違えばクリアすることもできますが ログインする前に直接 localStorage を見ることだってできます
その点では暗号化しておけば安心です
ただ 暗号化は少し重ための処理になるので 入力イベントのたびに localStorage に書き込んだり localStorage からデータを探したりするのは向かなくなります
思いつきでちょっとしたものを作ってみました
https://nexpr.gitlab.io/public-pages/encrypt-storage/example.html
ユーザーを選んでログインボタンを押すとそのユーザーでログインできます
ログインといっても JavaScript で cookieStore に直接書き込む擬似的なものです
ログイン後は textarea が出るのでここに書き込むと内容が自動で localStorage に保存されます
ログアウトして別ユーザーでログインしても復元されません
同じユーザーでログインすると復元されます
localStorage のキーはひとつだけなので 別ユーザーでなにか入力すると上書きされて前のユーザーの入力情報は消えます
ここでは暗号化のキーはユーザー ID を元に適当に作ってますが ちゃんとやる場合は他ユーザーのキーを予想できないようにサーバーでランダムに作って ログイン中のユーザー情報と一緒に受け取るとかが必要です
ブラウザ内の一時保存で良いデータを localStorage に保存することがありますが 考えてみるとログアウトして別ユーザーでログインしたら別ユーザーにも引き継がれますよね
テーマとかサイドバーの開閉状態とかそれくらいなら別にいい気もしますが 例えばフォームの入力情報みたいのは他ユーザーが見れるとまずい気もします
例えばクラッシュに備えた自動保存で 投稿に成功したり入力を破棄しない限り再度開いたときにストレージから復元するような機能です
こういうのがあると ログインするものでは localStorage を気軽に使いづらいですね
似たようなもので長期キャッシュも問題になるかもしれません
max-age をつけてリクエスト不要のキャッシュにすると ログアウト後でも見れてしまいます
そもそも静的ファイルは隠す必要はないのかもしれませんけど
昔ながらの Apache + PHP だと 静的ファイルはアプリの処理に入る前に Apache で返すので公開されてますし
それに基本は .js か .css か画像系なので履歴に URL は残らなくてログアウト状態だとアクセスする URL はわからないはずです
問題になるのはログ系のファイルでしょうか
月や日付などが URL に含まれるようなもので更新されないデータです
更新されないんだからキャッシュさせたくなりますが ユーザーの情報が入ってるのでログアウト後に履歴から開いてみれるのは良くないです
こういうのがあると max-age に任せるだけじゃなくて E-Tag に対応させて 304 を返すような機能も入れておいたほうがいいかもですね
テーマとかサイドバーの開閉状態とかそれくらいなら別にいい気もしますが 例えばフォームの入力情報みたいのは他ユーザーが見れるとまずい気もします
例えばクラッシュに備えた自動保存で 投稿に成功したり入力を破棄しない限り再度開いたときにストレージから復元するような機能です
こういうのがあると ログインするものでは localStorage を気軽に使いづらいですね
似たようなもので長期キャッシュも問題になるかもしれません
max-age をつけてリクエスト不要のキャッシュにすると ログアウト後でも見れてしまいます
そもそも静的ファイルは隠す必要はないのかもしれませんけど
昔ながらの Apache + PHP だと 静的ファイルはアプリの処理に入る前に Apache で返すので公開されてますし
それに基本は .js か .css か画像系なので履歴に URL は残らなくてログアウト状態だとアクセスする URL はわからないはずです
問題になるのはログ系のファイルでしょうか
月や日付などが URL に含まれるようなもので更新されないデータです
更新されないんだからキャッシュさせたくなりますが ユーザーの情報が入ってるのでログアウト後に履歴から開いてみれるのは良くないです
こういうのがあると max-age に任せるだけじゃなくて E-Tag に対応させて 304 を返すような機能も入れておいたほうがいいかもですね
普通のオブジェクトなら一部キーを除けば基本入れた順なので localStorage もそんなものだろうと手抜きでソートをサボっていたらひどい目にあいました
入れた直後は保存順なのにページをリロードすると適当に入れ替わってます (文字コード順でもなく見た感じの規則性はなさそうです)
内部の SQLite とかの都合でしょうかね
入れた順が必要なら value 側にタイムスタンプをつけておいてそれでソートが必須です
入れた直後は保存順なのにページをリロードすると適当に入れ替わってます (文字コード順でもなく見た感じの規則性はなさそうです)
内部の SQLite とかの都合でしょうかね
入れた順が必要なら value 側にタイムスタンプをつけておいてそれでソートが必須です