さくらのレンタルサーバーでbasic認証で会員制ホームページを運用しています

一人にIDとパスワードを伝えたのですが複数人がそのIDとパスワードを使いログインしているようです
1人1ID制にしたいと思います。
そこで、最後にログインした人を優先して残し、最初にログインしている人をログアウトさせたいです
このようなプログラムはとても組めません。すでに、組んであるフリーのプログラムなどはないでしょうか?
ご存知の方は教えてください

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/05/11 15:20:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:pogpi No.1

回答回数428ベストアンサー獲得回数59

ポイント250pt

ipアドレスで識別してもいいかも知れません。

アクセス解析で、取得できますね。
http://analyzer.netowl.jp/

ipアドレスによるアクセス制限のやり方
http://www.shtml.jp/htaccess/host.html

id:snow0214

社内LANから複数の人がログインしていると、全員が同じIPアドレスになり区別できませんよ。

2014/05/05 12:26:23
id:pogpi

snow0214さんのおっしゃる通りです。

2014/05/06 07:39:36
id:snow0214 No.2

回答回数470ベストアンサー獲得回数116

ポイント250pt

完全に多重ログイン禁止をする仕組みを作るのはできないのですが、ある程度ブロックをかけることができる方法として、セッションを使った方法があります。
下はPHPとcookieを使う方法です。DBを使うと防御がより強くなるのですが、作るのも大変なので、一番簡単な方法を示します。
今使っているログイン画面、多重ログイン禁止したい画面、ログアウト画面の冒頭で、下のようなPHPスクリプトを追加してください。

セッションIDを登録するcookieの寿命を180秒としているので、180秒間に操作がないと多重ログインできるようになります。この数値は$lifetimeを変更してください。

制御の性質上、ライブラリやフレームワーク、Webサーバの機能では実現できません。

ログイン画面

<?php
$lifetime = 180;	//秒
session_set_cookie_params($lifetime);
session_start();
$_SESSION['login'] = TRUE;
?>

多重ログイン禁止したい画面

<?php
session_start();
if (! $_SESSION['login'])	exit(9);		//またはエラー画面へジャンプ
$_SESSION['login'] = TRUE;
?>

ログアウト画面

<?php
session_unset();
?>
id:greuetyo

すいません このプログラムはどういう仕組なのでしょうか?
basic認証のIDをcookieがサーバーにアップロードしてるのでしょうか?

2014/05/09 01:36:49
id:snow0214

違います。
basic認証のIDは保存していません。

ログインしたかどうかをセッションID(実体はCookie)に持たせています。

2014/05/10 09:00:24
  • id:sasada
     パッケージのCGI等では難しいと思います。
     ログイン画面で

    1.ログインに成功したらシリアルナンバーを生成
    2.データベースでログインネームと古いシリアルナンバーをひも付け解除
    3.データベースでログインネームとシリアルナンバーをひも付け
    4.クッキーにログインネームとシリアルナンバーを格納

    として、一つ一つのhtmlをphp等のスクリプトに直して、その冒頭で

    1.ログインネームとシリアルナンバーの取得(クッキーの取得)
    2.ログイン状況の検査(データベースのテーブル引き)
    3.ログインネームとシリアルナンバーがひも付いてなければエラー表示へ

    とする感じでしょうか。
     いずれにせよ、プログラミングが必要になると思います。
  • id:yayokin
    BASIC認証を使わずにPHPのクッキーを利用するしかないですね。
    プログラミングを覚える必要があります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません