19

私は最近、Zendframework 2 を使用してアプリケーションの構築を開始しました。ZF1 での経験は豊富です。ここで ZF2 で直面している主な問題はセッションです。

セッションコンテナを作成する方法は次のとおりです。

use Zend\Session\Container;

// セッション コンテナの作成: (以前は名前空間として呼び出していました)

$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');

今このように私はいくつかのコンテナを持っています、

このような特定のコンテナのキーをクリアできます

// キーでセッションから値を取得: ( get value from namespace )

$email = $session_user->offsetGet('email');

// セッションで値を設定: ( 名前空間から値を設定 )

$session_user->offsetSet('username', 'abcd');

今私の問題は、アプリケーションのいくつかのレベルで設定されているコンテナ全体をクリアすることです。

以下のコードを試してみると、すべてのセッションコンテナがクリアされます。

$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();

多くのキーを持つ「ユーザー」というコンテナのみをクリアしたい(最後に何があるかわかりません)。これを達成する方法はありますか

各キーで offsetunset を実行できることはわかっていますが、それは私が感じる最適な解決策ではありません。

特定のセッション コンテナをクリアする別の方法があれば、親切に提案してください。

注: - ZfcUserやAkrabatセッションなどのサードパーティモジュールは使用していません

この投稿に返信していただきありがとうございます。

4

7 に答える 7

44

名前空間を clear メソッドに渡すだけです。

$session_user->getManager()->getStorage()->clear('user');

$_SESSION も配列のように扱うことができるので、以下も機能します

unset($_SESSION['user']); 
于 2013-03-04T06:45:21.377 に答える
2

以下は、Zend Framework 2 でセッションを破棄するための詳細です。

  • 基本的な PHP 機能の使用

    session_start()関数はセッションを開始します。

    session_destroy()関数は、セッション配列に保存されているすべてのデータを削除します。

Zend Framework 機能を使用するようになりました:

明確に理解するために、まず Zend Framework でセッションを作成してから、削除プロセスを作成します。

  1. セッションの作成

Zend\Session\Container を使用します。

$session_container = new Container('user_session');

$session_container->last_login = date('Ymd H:i:s');

$session_container->sess_token = trim(base64_encode(md5(microtime())), "=");

  1. セッションの削除

$session = new Container("user_session");

$session->getManager()->getStorage()->clear('user_session');

user_sessionは、詳細を格納するためのセッション配列キーの名前です

于 2017-12-22T10:05:25.640 に答える
1

@Crispによって投稿されたソリューションはチャームのように機能しましたが、この問題を解決するために調査した後に見つけた別の方法を次に示します

use Zend\Session\SessionManager;

$sessionManager = new SessionManager();

//get array of sessions from storage 
$array_of_sessions = $sessionManager->getStorage();

//Unset which ever container you want by passing its name ( ZF1 its called namespace ) 
 unset($array_of_sessions['user']);
 unset($array_of_sessions['usershares']);
 unset($array_of_sessions['actions']);

セッションマネージャーは、セッションをクリアするか読み取るかを管理するために使用する必要があるものであり、コンテナーはセッションマネージャーによって管理されるエンティティの1つであると思います。

これは、各セッション コンテナーのオブジェクトを作成し、 clear メソッドを呼び出す際に所有格を持つ他のユーザーに役立つ場合があります。

于 2013-03-04T08:21:32.853 に答える
0

すべてのセッションを破棄するには:

  $session = new Container('base');
  $session->getManager()->destroy();

  or

シンプルな php destroy 関数を使用します。

 session_destroy();

この関数は、すべてのセッションをクリアします。

これが役立つことを願っています。

于 2013-08-06T10:13:30.137 に答える