質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

4回答

7412閲覧

セッションタイムアウト、自動ログアウトの仕組みが知りたい

spypow

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

4クリップ

投稿2022/04/14 16:42

今認証付きウェブページを作っています。
認証後、ウェブページにたどり着いた状態で、一定時間操作がなければ(例えば1時間)、自動でログアウトさせるような仕組みを検討しています。
ただ、その仕組みがわからず、どう実装すればよいかわかりません。
javascriptのsetTimeoutを使って時間を計測する方法は見かけたのですが、これが一般的なやり方なのでしょうか。
認証しているためトークンがありますが、なにかこのトークンを用いて自動ログアウトを実装できないものでしょうか。
(トークンに関して、あまり理解できておりません。)

morimorinoki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/04/14 22:35

回答を書いてから気がついたんですが前のスレッド https://teratail.com/questions/sg2306hp8gv0jh の話の続きですか? であれば、質問欄を編集してその URL を示しどう関係するのかを明記してください。
退会済みユーザー

退会済みユーザー

2022/04/16 07:38

質問者さん、無言ですが、回答がでているのでそれら対するフィードバックを書いてください。忙しいのかもしれませんが、役に立った/立たなかったぐらいはすぐにでも返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
guest

回答4

0

なにかこのトークンを用いて自動ログアウトを実装できないものでしょうか。

どのようなトークンをお使いかにもよりますが、最近よく使われるJWTであれば、トークンの有効期限がトークン内に入っているので、それを使うのが一般的だと思います。トークン内の有効期限はJavaScriptからも読み取れますが、わざわざそうしなくても、

  1. ユーザーが機能を実行しようとするとJavaScriptがAPIを呼び出す
  2. APIがトークンを確認したところ有効期限を過ぎているのでタイムアウトエラーを返す
  3. JavaScriptがタイムアウトエラーを受け取って「セッションタイムアウトしました」などの表示をする

くらいでよいかと思います。上記は一般的な実装です。ユーザーが何もしないのに「タイムアウトしました」と表示するサイトも中にはありますが、そうしたければsetTimeoutでトークンの有効期限チェックを定期的にすればよいと思いますが、個人的にはそこまでしなくてもよいのではないかと思います。

投稿2022/04/15 02:19

ockeghem

総合スコア11705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHPでも基本的にはクッキーを利用したセッションIDでセッション情報を管理しているので
クッキーの生存期間が切れた時点でセッションの引き継ぎはできなくなります

投稿2022/04/15 00:37

yambejp

総合スコア117719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

認証システムが組み込まれたフレームワークを使いましょう。

例えば ASP.NET Web アプリでは、ユーザーがログインに成功して認証されると、Web サーバーは認証チケットをクッキーに入れてクライアントに送信します、以降クライアントはアクセスのたびそのクッキーを要求ヘッダーに含めてサーバーに送信するので認証済みユーザーであると認められます。

有効期限は認証チケットに含まれているので、サーバーはそれをチェックして、期限切れなら認証が必要なページにはアクセスを許可しません (ログインページにリダイレクトします)。

そこには JavaScript の出番はありません。たぶん、ASP.NET に限らず認証に JavaScript を使っているフレームワークはないのでは?

何にせよ初学者が自分で認証システムを実装するのは、勉強のためちょっと試してみるということならともかく、実用にはならないと思います。セキュリティホールだらけになるでしょうから。


【追記】

前のスレッド https://teratail.com/questions/sg2306hp8gv0jh を見ると React の話のようですが、その場合はクッキーではなくトークンを使うことが多いようです。

ASP.NET Core Web API + IdentytyServer をバックエンドに使う場合、以下のスレッドの私の回答で書いたトークンを使うフレームワークが用意されています。

SPAの認証方法について教えて下さい
https://teratail.com/questions/qs7cxtc0ymydxn

認証操作に使う jsx ファイルも実装されているので、Visual Studio 2022 を使える環境があるなら一度アプリを作ってどう動いているか見ると参考になると思います。

投稿2022/04/14 22:26

編集2022/04/15 01:37
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

JavaScript側は関係ないです。
セッションはあくまでサーバーサイドで持っているセッション情報が保持されているかどうかで判定します。
サーバーサイド(の言語)の設定です。

setTimeoutはあくまで一定時間でクライアント側で処理を行うものであり、セッション情報は全然関係ありません。

投稿2022/04/14 21:00

編集2022/04/14 21:01
m.ts10806

総合スコア80888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問