本文へ移動
easeweb
ご相談
トピックを検索

警告も延長もないセッションタイムアウト

購入手続きがページを開いてから15分で利用者をログアウトさせ、警告がないか、スクリーンリーダーが読まないバナーだけで知らせるため、フォームに入力した内容がすべて失われます。

WCAG 2.2
SC 2.2.1A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり setTimeout(signOut, 15 * 60 * 1000)
アクセシビリティの問題を示した図: 手の操作:まだ入力中だったのに、どこへ消えたの?
01

問題

入力、読むこと、操作に時間がかかる人は、購入手続きの途中でログアウトされ、入力した内容を失います。気づける警告も、時間を延ばす手段もありません。

02

試してみる

ギフトメッセージを書き換えてから時間を進め、15分の制限の前にお店が何をするかを確かめてください。

ウィンドウの上のデモ用の時計は、経過する時間の代わりで、お店の一部ではありません。入力がサーバーに何も送らないのと同じく、入力しても時計は戻りません。最後の2分は実際の時間で進みます。「問題2」では、Tabで警告に届くか試し、スクリーンリーダーの読み上げも確認してください。

問題あり 修正できますか?

デモ用の時計:お店が最後にリクエストを受けてから 0:00
Fernbrook Alexとしてログイン中

配送先

スクリーンリーダーの読み上げ:

(制限の2分前まで進める)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

セッションを利用時間より長くするか、終わる前にすぐ目に入るダイアログで警告し、1回押せばログイン状態が続くようにします。

  1. 1時間制限は20時間より長くするか、利用者が解除できるようにするか、終わる前に警告する。
  2. 2制限を残すなら、終了の20秒以上前に警告し、1回の操作で、必要なだけ何度でも延長できるようにする。
  3. 3警告はフォーカスのある場所に出し、見えて、読み上げられ、最初に届くようにする。
修正前

警告なしでログアウトするセッション

// 最後のリクエストから15分でセッションを終えるapp.use(session({ secret: process.env.SESSION_SECRET, rolling: true, cookie: { maxAge: 15 * 60 * 1000 } }));
修正後

ログイン状態を続けられる警告ダイアログ

// 同じ15分のセッション。どのリクエストでも更新されるapp.use(session({ secret: process.env.SESSION_SECRET, rolling: true, cookie: { maxAge: 15 * 60 * 1000 } }));app.post('/session/extend', (req, res) => res.sendStatus(204));

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得、または全ガイドをコーディングエージェントで使う。

04

修正の確認

マウスを使わない5つの確認

確認方法: キーボード、スクリーンリーダー、ズーム

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。セッションの設定、ログインの流れ、警告を変更した際は、再度確認します。

制限

ここで扱うのは、セッションやページを終わらせる時間制限と、それを警告する一つの方法です。ひとりでに動く、流れる、更新される内容には、別の達成基準とガイドがあります。一時停止できない、流れる文字、カルーセル、アニメーションを参照してください。タイマーで消えるメッセージも2.2.1の時間制限で、こちらにもガイドがあります。読む前や元に戻す前に消えるトーストを参照してください。遅延付きのmeta refreshのように、タイマーでページを再読み込みしたり移動させたりすることも、別のトピックです。データが失われるまでの無操作の時間を伝えること、時間に頼らない手順を設計することは、それぞれAAAの別のトピックです。制限が本当に欠かせないものか、リアルタイムのイベントの一部かは、サービスを運営する人にしか判断できません。また、ひとりでに開くダイアログの扱いはスクリーンリーダーによって異なります。利用者が使っているもので警告を確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

コードを更新しても、使いやすさを保つために

ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。

再テストの進め方