2010-12-13 29 views
6

Facebookのソーシャルネットワークに移動すると、2つのアカウント(Firefoxでは1、Internet Explorerでは1)、または複数のアカウントを開くことができます。これは、Facebookのポリシーが同時にセッションを開くことしかできないことを知っているのであまり良くありません。セッションを防ぐ方法

セッションを開始するとき、別のブラウザ(Internet Explorer/Safari/Opera ...)で同じセッション(セッション名$_SESSION['user'])が再オープンされないようにするにはどうすればよいですか?

それ以外の場合は、セッションが2回開かないように、すべてのブラウザで特定のセッションが開いていることをどのように知ることができますか?

+2

ユーザーのIPを格納し、セッションがあるかどうかを確認してから、IPをチェックしますか? –

+4

私の頭に浮かぶ最初のことは、ユーザテーブルに 'LoggedIn'ブールフラグを持たせることです。 – Ben

+0

@Rocket、ありがとう+1、私はそれを考えたことはありませんが、IPのアドレスはベンの答えよりも難しいようです@Ben、これは便利な方法です(私はそれを使用する+1):ありがとう! – SmootQ

答えて

2
$token = hash('sha256', rand() . microtime() . $_SERVER['REMOTE_ADDR']) // rand as possible 
$_SERVER['user'] = $token; 
+1

申し訳ありませんが、私はこのコードを非常にうまく理解できません。それはサーバー変数に関するものですか? – SmootQ

+0

Okey、ユーザー名を取得するサーバー変数を作成していますか? – SmootQ

+1

私はこのアプローチを以前から使ってきました。基本的には、ユーザーがログインするときに、 "user_" +ユーザー名(例: "user_simotaqi")というサーバー変数を作成します。これには、ログイン時間に基づく値があります。ページの読み込みが一致していることを確認してください –

1

代わりのにオープンセッションが別の場所にすでに存在する場合、新しいブラウザで開かれてから新しいセッションを防ぐには、新たなログインが発生した場合、そのユーザーアカウントへ無効既存のセッションを検討してください。これはユーザーの不満を最小限に抑え、実装が簡単です。

+0

この問題を思い出していただきありがとうございます。ユーザデータベースフィールド(logedIn)がすでにyesの場合、このユーザIDをセッションに渡します。+1 – SmootQ

+0

@Simo - ありがとうございます。私は単に、ログインが発生したときに(特定のユーザの)すべてのセッションデータを削除/クリアし、最新のログイン用の新しいセッションデータを作成します。 – karim79

+0

ログインしたユーザーのすべてのセッションデータを消去/消去して新しいセッションデータを作成すると、このセッションは最後にログイン – SmootQ

関連する問題