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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

解決済

Node.jsで、同じセッションIDの二重ログインのみ防ぎたい

tetakaha759
tetakaha759

総合スコア17

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

1回答

0リアクション

2クリップ

431閲覧

投稿2022/09/28 00:01

編集2022/09/28 00:22

前提

タイトルの通りとなりますが、Node.jsにて同じセッションIDにおける二重ログインのみ防ぎたい、と考えています。

「同じセッションID」とは、「同じブラウザで、別のタブ/ウィンドウで同一アカウントにてログイン」している場合を想定しています。

よって、同じブラウザでも「シークレットウィンドウ」を使ったり、FireFoxとChromeといった別のブラウザを使った場合は、含まれません(セッションIDが異なるため)。

実現したいこと

同じブラウザであるアカウントでログインし、別のタブ/ウィンドウで同じアカウントでログインしようとした際、「すでにログイン中です」ということで、ログインを拒否したく存じます。

そのログイン拒否を行う際の判定基準となるものを、ご存じの方はご教示いただけませんでしょうか。

イメージとして、同じブラウザでも各タブごとに固有の値があれば、それを利用できるかもしれません。
もしくは、固有の値を持たせるような仕組みです。

発生している問題・エラーメッセージ

現状で、エラーメッセージは特にありません。

試したこと

「express-session」の「req.headers」などの値を参照してみましたが、「cookies」に含まれる値は同一ブラウザで別のタブ/ウィンドウであっても、全く同じでした。

タブ/ウィンドウとしての固有値は、「req(HTTPリクエスト)」オブジェクトには含まれていないのでしょうか。

補足情報(FW/ツールのバージョンなど)

Node.js v14.15.5
express 4.17.1
express-session 1.17.2

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。