2011-07-18 14 views
3

私は、PHPで特定のセッションを破壊する方法の洞察を探しています。パートナーWebサイトを通じて、ユーザーはトークンを使用してメインWebサイトにログインし、フルセッションを取得します。特定のPHPセッションを破壊する方法

ユーザーがパートナーWebサイトからログアウトした場合、パートナーWebサイトは破棄機能を呼び出すこともできます。その後、自分のユーザーもログアウトする必要があります。

これにはどのような方法が最適ですか? Zend_Session destroyメソッドはパラメータを受け入れません。同様に、PHP関数session_destroyも同様です。

は、私は2つのオプションを検討しています:ファイル/ memcacheのから直接セッション情報を削除

  1. をこれより「クリーン」なアプローチを好むだろう。

  2. これは「トークン」ユーザーであるかどうかすべてのページリクエストを確認します。リストを維持してトークンが期限切れになっていないかどうかを確認します。これは、ビジーなウェブサイトにオーバーヘッドを追加しますが、私の唯一の選択肢かもしれません。

私は見ていない3番目の/より良いアプローチがありますか?

+0

[セッションIDを使用してセッションを設定解除する](0120-18752)をご覧ください。 – symcbean

答えて

1

ユーザのセッションを「キックする」ことができるようにするには、セッションストレージにMySQL(またはその他のdb、sqlite偶数)を使用する場合のみ可能です。

次に、データベースからエントリを削除するだけで、セッションを終了できます。

これはまた、あなたがそのような特定のユーザーのセッションや他のもの:)

の「制御を取る」として物事を行う行うことができて、非常に基本的な実行のためにこれを参照してください:http://www.devshed.com/c/a/MySQL/Custom-Session-Management-Using-PHP-and-MySQL/(ない最良の例が、十分あなたを起動する完全な例)。

EDITまた

、パートナーのサイトを介しログアウト、別の方法は、私は彼らが「コールバック」が指定された(O2および他のこのようなサイトであった)過去に使用している場合(REST APIコールほとんどの場合)、ユーザが自分のサイトからログアウトしたときに呼び出す必要があります。

+0

面白いアイデア - すばらしいGoogleしかし、これは多くの同時ユーザー(セッション用のmemcacheの使用)を使用している忙しいウェブサーバーであるため、次のような洞察を与えました。 " SQLiteは書き込み集中型環境向けではありません。セッションが更新されるたびに、データベースファイルがロックされ、複数のセッションを1つずつ更新する必要があります。別の問題が破損する可能性があります。単一のSQLiteベースのセッションが破損した場合、失うだろう。" – Tramov

+1

個人的に私はどちらもSQLiteを使用しません... PHPは複数のメソッドを使用することができます。私は、シンプルなCMSシステムからコールセンターアプリケーションまで、非常に長い時間PHPのセッション管理にMySQLを使用してきました。 – Brian

+0

リンクのおかげで、あなた自身のセッション管理ルーチンを動かす素晴らしい方法です。 – Tramov

-2

データベースソリューションは、セッションデータベースをmainwebsiteとパートナーサイト間で共有する必要があることを意味します。これは頻繁にはそうではありません。これらの単純な行に沿ったもので十分でしょうか?

<img src="mainwebsite/logout.php"> 

mainwebsite/logout.php:

<?php session_destroy(); ?> 
+0

彼は現在のユーザーのセッションではなく、特定のセッションを破壊する方法を尋ねていました。 – Brian

+0

私が見ているように、彼の問題の本質は、パートナーのウェブサイト上にある間に、メインのウェブサイトの現在ログインしているユーザーをログアウトすることです。 –

+0

申し訳ありませんが、あなたの答えはまだシームレスなユーザーエクスペリエンスを提供していません。私は私の下投票thoを撤回します - 私はそうすることができますあなたの答えを編集:) – Brian

4

ロール自分で自分のためのセッション処理を必要はありません。

session_id()は、作業するセッションIDであるパラメータを取ることができます。

したがって、ユーザーをパートナーサイトに渡すときは、session_id(または何らかのトークンなど)を渡します。

そして、パートナーサイトは、このようなスクリプトをヒットすることができます:

キル・ユーザーsession.php

<?php 
/** 
* Destroy any active session identified by $_POST['sid'] 
*/ 
session_id($_POST['sid']); 
session_start(); //this line may not even be necessary 
session_destroy(); //destroys that session. 

したがって、ユーザーがパートナーサイトでログアウトすると、パートナーサイトの記事あなたがkill-user-sessionスクリプトに与えたsession_id(あなたが与えたもの)は、あなたのサーバ上で破棄されます。

もちろん、何らかの方法でkill-user-session.phpへのアクセスを制限したいと思うかもしれません。

+0

時には、最高の答えは受け入れられた答えではありません。これは最高の答えです。 – Peter

関連する問題