ログイン済状態からの再ログイン時の問題

このQ&Aのポイント
  • Ruby on Railsのログイン認証でdeviseを使用している際に、未ログイン状態でログイン画面を2つのタブで開いており、片側の画面からログインした状態でもう片方の画面から別のIDでログインすると、最初のログインIDのままでログイン状態になってしまう問題が発生しています。
  • この問題は、会社内でパソコンが複数人で使いまわされているため、ログアウトし忘れてセッションが切れる前に別の人がログインした場合に、最初のログインした人のIDで操作ができてしまうことにつながります。
  • 対策としては、Devise::SessionsControllerをカスタマイズしてセッションを切断する方法が考えられますが、ログイン状態からの再ログイン時に処理が飛んでこないため、実現が難しい状況です。セッションを強制的に切断する方法についてのアドバイスをいただけると助かります。
回答を見る
  • ベストアンサー

ログイン済状態からの再ログインしたときの問題

Ruby on Rails で ログイン認証でdevise を使用していますが、困った問題が起こっています。 未ログイン状態でログイン画面を別タブで2画面 開いていたとします。 まず片側の画面からあるIDでログインしたとします。 この状態で、もう片方の別タブの画面から別IDでログインすると、そのままログイン状態になるのですが、ログインIDが最初にログインしたIDにのままになっています。このシステムはある会社で使用されているのですが、その会社ではパソコンが複数人で使いまわされているため、ログアウトし忘れてセッションが切れる前に別の人がログインした場合、最初にログインした人のIDで操作ができてしまうことになり、非常にまずいのです。 Devise::SessionsController をカスタマイズすれば、対応できるかと思いましたが、そもそもログイン状態から再ログインした場合、処理が飛んでこないようです。ログイン状態で再ログインした場合、セッションを強制的に切断したいのですが、これをするためにはどのようにすればよいか、教えていただけると助かります。よろしくお願いします。

  • Ruby
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

HTTPというステートレスなプロトコルでログイン状態かどうかを判断するための 情報は一般にCookieでやり取りされます。 Railsなどのサーバはブラウザから送られてきたCookieを見てログインしているか どうかを判断します。 ブラウザはタブをまたいでCookieを共有するのが一般的なので、サーバ側でこれを 制御するのは「原理的に」不可能です。 せいぜいクライアントを使用するユーザに必ずログアウトするように指導するぐらい しか手はありません。 これはRailsに限った話ではなく、PHPでも何でも同じです。

関連するQ&A

  • インターネットエクスプローラーのタブを複数表示すると最初にログインしたyahooのIDでログインした状態で開いてしまいます。

    yahooのIDを複数持っており、一つ目のIDでyahooメールにログインした状態で、別のタブを開くと、最初のIDでログインした状態でタブが開いてしまいます。新しいタブを開いて、別のIDでログインしたいのですが、一旦ログアウトして別のIDでログインすると、最初のタブも後でログインしたIDに変わってしまいます。作業の関係上、別のIDでログインしたタブを複数開いて使いたいのですが、どのように設定すれば良いのでしょうか。エクスプローラ6.5では特に設定しなくてもできていました。

  • Rails deviseログイン画面について

    deviseをインストールしました。 全ページに認証がかかるように、application_controller.rbの最後に以下を追記しました。 before_action :authenticate_user! すると、表示させたいログイン画面とは別のログイン画面があらわれたのですが、 なぜでしょうか? URLを見ると「http://localhost:3000/users/sign_in」になっています。 どなたか、詳しい方がいらっしゃいましたら、ご教授をお願いします。 【環境】 Ruby 2.2.2 Rails 4.0.13 CentOS6 devise 3.5.1 以上、宜しくお願いします。

  • ログインできない

    こんばんは。いつもお世話になっております。 些か抽象的な質問になってしまいますが、以下のような状況に困っております。 1.ページを移動したりすると、時に勝手に’ログアウトしてしまう事がある’。 2.ログイン状態で、他のサイト(違うサーバ)からリンクを辿って訪問すると、’ログアウトしてしまう事がある’。 以上のような感じなのですが、勝手にログアウトした時は、なかなかログイン出来ず、またログイン出来ても、ページ移動の際、直ぐにログアウトしてしまうといった状況です。 尚、ログインする際は、DB(MySQL)に問い合わせ、ログイン状態を保つため、登録データのidなどを、$_SESSION["id"]=$id; としてセッションに代入しており、ページ移動の際(ログインのみ閲覧可能なときは)、auth.php(ログイン画面、DB問い合わせページ)に移動するよう、 <?php session_start(); require_once("./auth.php"); としたり、 if($_SESSION["id"]==""){ header("Location: http://○○○.com/"); } のようにしています。 些か抽象的で、かつお恥ずかしい質問かと重々承知しているつもりですが、レンタルサーバを借り、実際にアップロードしたところ、開発環境では問題なかった状況で、非常に困っております。 DBの設計が可笑しいのか?PHPのソースが可笑しいのか?色々考えられる点はあるかと思いますが、何処を見直せばいいのか分からず、考えられる点などご意見を伺えれば幸いに思っております。 お忙しい中恐縮ですが、ご指導のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • ログイン情報が混ざってしまう

    同じwebサーバーにディレクトリ分けして2つのサイトを運営しようと思っています。 2つのサイトはphpで動いており、プログラム的にはほぼ同じ内容です。 サイトにはログインフォームがありログインして操作を行っています。 タブブラウザ(IE7,やfirefox)を使用して2つのサイトを同時に別タブに開くと上手く動きません。 (ログアウトしてしまったり、Session情報がどちらかのデータに上書きされているような挙動です。) 自分なりに色々調べてみたのですがSessionIDが2つのタブで同じになってしまっていることが分かりました。 (SessionIDは固定値ではなくphpに自動取得させています。なので、ブラウザを一回閉じてから開いた場合はおかしな挙動はしません。) 以下セッションの部分のコードです。 if(isset($_REQUEST['PHPSESSID'])) { session_id($_REQUEST['PHPSESSID']); //Setting the same session id to Forums as in CRM $sid=$_REQUEST['PHPSESSID']; } session_start(); ブラウザを初めて開いた場合、$_REQUEST['PHPSESSID']は空なのですが、session_start();をすると別タブでも最初から$_REQUEST['PHPSESSID']に値が入ってしまっています。(この値が重複しています。) この状況を何とかするにはどうしたらいいでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Ruby on Rails でのログイン機能について

    Ruby on Rails でのログイン機能について あるPCアプリにログイン・ログアウトの機能をつけたいのですが、良い方法がなくて困っています。 現状は、プラグインのrestful_authenticationを使用しています。 しかし、ログアウトをせずにブラウザを閉じたあにページにアクセスすると自動でログインしていまいます。 何か良い方法はないでしょうか? 

  • ログインしたら他からログインできないようにしたい

    PHP+MySQLで会員サイトを作っています。 1. 誰か一人がログインしていたら、そのログイン会員と同じIDとパスワードでログインしようとするとログインできないようにするか、元のログインしていた人が強制的にログアウトするようにしたい。 2. 一人のユーザーが複数アカウントを作って会員サイトを使いたい放題にするのを阻止したい。 そのため、「PC1台からは必ず1ユーザーのみしかログインできないようにしたい」です。 (複数PCを使われたら仕方ないかもしれません・・・) よく銀行サイトのようにログイン中に他のブラウザや端末からログインしようとすると「すでにログイン中です。ログインし直しますか?」のようになりますが、1.はこんな感じを考えています。 仕組みとしてはどのようにするのが良いのでしょうか? 1. ログイン時にセッションIDを作り、データベースにそのセッションIDとIPアドレスを記憶しておいて、Web上で何か操作するたびにブラウザ側のセッションIDとデータベース側のセッションIDを比べて同じなら操作を実行し、違うなら操作できないようにする。 2. ログイン中に別のブラウザからログインしようとすると、データベース側に保存されているセッションIDが違うのでログインできないようにする。 3. 同じIPアドレスですでにログイン中の場合、同じPCからは他のアカウントでログインできないようにする。 こんな感じでしょうか? 何か問題点やそもそもこの仕組は間違っていて常套手段があるなどありましたらお教えください。 なんとなく、IPアドレスのチェックはWiMAXなどは時間とともに変わったりするのであまり良くはないかもしれません。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【緊急です】楽天に勝手にログイン状態になります。

    先日から、yahooホームを開くと、たまに自分のIDで自動ログインになっていることに気付きました。 なぜか、勝手にログインされてるときと、されないときがあります。 オークション出品用に、別IDを持っていますが、そのIDではそのような事が起こった事はありません。 原因がわからないまま、すごく不安に思っていました。 こちらで過去の質問&回答を読み、【ツール】→【インターネットオプション】で、クッキーの削除、ファイルの削除、履歴クリア、をしました。 おそらく、これでいいのだとは思いますが、 先ほど楽天を利用して、ログアウトして、ページを閉じた後、 再度楽天を開くと、ログイン状態でした。 楽天は、自動でログアウトできないようですので、 手動でするしかないと思っていましたが、手動でもログアウトできなくなりました。 すごく心配です。 どなたかアドバイスをよろしくお願い致します。

  • スカイプ ログイン状態について

    スカイプの表示について教えてください。 私は常にログイン状態にしているので PCを起動している間はログインになっています。 (手動でログイン・ログアウトはしていません) スカイプ画面?を開いていて、相手からチャットがくると PC画面下のスタートや音量などが並んでいる所にあるスカイプ画面が ピコっという音と同時にオレンジ色になります。 (送られてきたチャットを読むと元の色(青)に戻る) それ以外にも相手がログアウトした時?にもオレンジになる時が あるのですが、ならない時もあります。 これは相手がどのような状態の時でしょうか。 スカイプを手動でログアウトした、 手動ログアウトせずにPCをログアウトした、 ログイン状態を隠している、 普段は相手がオフラインにしてもオレンジにならない事が 殆どですが、たまにオレンジになっているので気になりました。 どなたかご存知の方、お願いします。

  • Skypeのログイン状態について

    同じような質問があったらごめんなさい。 スカイプのログイン状態で、ログイン状態を隠すがありますが オンラインのまま一回もログアウトせず、設定を隠すにした場合 相手にポップアップ(右下の通知)は出るんでしょうか? よろしくお願いします。

  • Railsログイン認証について

    イントラネット上で使用する業務システムのログイン画面を作成しています。 調べてみると、device、sorcery等の認証プラグインが存在するようですが、 どれを使おうか思案中です。 Railsのログイン認証について、詳しい方がいらっしゃいましたら、 お勧めの認証プラグイン等がありましたら、ご教授ねがいます。 【開発環境】 Ruby 2.2.2 Rails 4.0.13 CentOS 6.6 Oracle 以上、宜しくお願いします。

    • ベストアンサー
    • Ruby

専門家に質問してみよう