6

ZF2 でセッションを適切に使用する方法を教えてください。これまでのところ、私はこのコードを持っています:

"session" =>
[
    "remember_me_seconds" => 2419200, 
    "use_cookies" => true,
    "cookie_httponly" => true
]

これは、stackoverflow の投稿からコピーしたセッション構成です。このコードを、セッションを使用する各モジュールまたはアプリケーション モジュールの module.config.php に配置する必要がありますか?

public function onBootstrap(EventInterface $Event)
{
    $Config = $Event->getApplication()->getServiceManager()->get('Configuration');
    $SessionConfig = new SessionConfig();
    $SessionConfig->setOptions($Config['session']);
    $SessionManager = new SessionManager($SessionConfig);
    $SessionManager->start();  
    Container::setDefaultManager($SessionManager);
}

Module クラスの onBootstrap() メソッドと同じ問題。このコードは、各モジュールの Module クラスに入れる必要がありますか?それとも、アプリケーションの Module クラスに 1 回だけ入れる必要がありますか?

どちらの場合も、両方のアプローチを試し、このコードを両方のモジュールに同時に入れようとしましたが、達成できたのは、コントローラーのコンストラクターでセッション変数を設定し、アクション/メソッドでそれらを読み取ることだけでした。あるアクション/メソッドでセッション変数を設定してから、別のアクション/メソッドで読み取ることができませんでした。コントローラーのコンストラクターで変数を設定した行を削除すると、セッションでこれらの変数が表示されなくなります。セッションは、ページが要求されるたびに作成および削除されたように動作します。

何か不足していますか?私をインターネット上のリソースにリンクしないでください。私はそれらをすべて読みましたが、あまり役に立ちません。

4

3 に答える 3

14

Zend Framework 2 でセッションを使用するために構成を行う必要はありません。もちろん、設定を変更することはできますが、セッションを起動して実行したいだけであれば、今のところ気にする必要はありません。

申し訳ありませんが、あなたの最後の文は無視します。約 1 か月前に、ZF2 でセッションの使用をすばやく開始する方法を示す目的で、この主題に関する記事を書きました。検索エンジンでのランキングが低いため、読んだことがない可能性があります。

これを行う方法を示すコード スニペットを次に示します。舞台裏でどのように機能するかに興味がある場合は、上記のリンクを参照してください。

namespace MyApplication\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\Session\Container; // We need this when using sessions

class UserController extends AbstractActionController {
    public function loginAction() {
        // Store username in session
        $userSession = new Container('user');
        $userSession->username = 'Andy0708';

        return $this->redirect()->toRoute('welcome');
    }

    public function welcomeAction() {
        // Retrieve username from session
        $userSession = new Container('user');
        $username = $userSession->username; // $username now contains 'Andy0708'
    }
}
于 2012-12-27T14:28:32.190 に答える
1

セッションについて

セッションをどこに保存しますか (mysql-db、mongo-db、または ram など)? セッションを「名前空間」に分類する方法

$_SESSION["namespace"]["user"],
$_SESSION["namespace_1"]["user"]?

セッションマネージャー

Zend では、Zend\Session\SessionManger は、上記の多くのことを行うのに役立ちます

SessionManger のシンプルな設定

$sessionManager = new SessionManager();
$sessionStorage = new SessionArrayStorage();
$sessionManager->setStorage($sessionStorage);
//you can add more config, read document from Zend
$sessionContainer = new Container("ABC", $sessionManager);
$sessionContainer->offsetSet("user", "lehoanganh25991");

SessionManager構成なしで新しいコンテナを呼び出すとき

$sessionContainer = new Container("abc");

舞台裏で、Zend はデフォルトの SessionManager を作成し、それを Container に渡します。

SessionArrayStorage、$_SESSION

Zend の SessionArrayStorage は $_SESSION で動作しますuser

$_SESSION["ABC"]["user"]

mysql-db、mongo-db、in ram などの他のストレージを設定すると、$_SESSION を介したアクセスが機能しない可能性があります

アクセス セッション

モジュール A でセッションを設定

Moudle B でどのようにアクセスできますか? どこで $sessionContainer 変数 @@?

かなり奇妙ですが、このコンテナにアクセスしたい場合は、SAME CONFIGで新しいものを作成してください

$sessionManager = new SessionManager();
$sessionStorage = new SessionArrayStorage();
$sessionManager->setStorage($sessionStorage);
$sessionContainer = new Container("ABC", $sessionManager);
//access
var_dump("get user from \$sessionContainer", $sessionContainer->offsetGet("user"));

github でデモを確認してください: https://github.com/hoanganh25991/zend-auth-acl/tree/d0a501e73ac763d6ef503bbde325723ea1868351

(コミットにより、プロジェクトが変更されました。このツリーでアクセスします)

in FronEnd\Controller\IndexController
in AuthAcl\Module.php
in AuthAcl\Service\SimpleAuth
i acces same session at different places
于 2016-04-13T06:59:15.287 に答える
0
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Session\Container;

class IndexController extends AbstractActionController
{   
    // set session values
    public function indexAction()
    {
       $session = new Container('User'); // name your session here by replacing User
$user_session->offsetSet('user_name', "your user name"); // set your session user name
$user_session->offsetSet('user_id', "1232"); //set your session user id
    }

// function to get values from session
  public function getdataAction(){
    $session = new Container('User');
    $user_name= $user_session->offsetGet('user_name'); // get user name from the session
   $user_id= $user_session->offsetGet('user_id'); // get user id from the session
}

// function to unset session values
 public function unsetdataAction(){
   $session = new Container('User');
    $user_session->offsetUnset('user_name'); // unset user name
        $user_session->offsetUnset('user_id');
}
} 
于 2017-04-12T11:25:58.080 に答える