0

アプリを共有ホスティング環境にアップロードしましたが、正しく動作していないようです。2つのプラグインを登録しています。1 つはセッション タイムアウトをチェックし、もう 1 つはログイン後にセッションのチェックが作成されます。問題は、2 番目のプラグイン (security.php) が開始された後、セッションがまだ作成されていないため、ユーザーをログイン画面にリダイレクトすることです。リダイレクトすると、ページに次のように表示されます。ページが正しくリダイレ​​クトされていません。すべてがローカルで正常に動作するため、何が起こっているのかわかりません。以下は、ここで言及した 2 つのファイルです。Security.php (ここでは、いくつかのオプションを試しましたが、何も機能しなかったことがわかります)。

class Plugins_security extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch (Zend_Controller_Request_Abstract $request)
    {
        $auth = Zend_Auth::getInstance();

        $moduleName = $request->getModuleName();
        //$vc = new Zend_Application_Resource_View();
        if ($request->getModuleName() != "auth")
        {
            $auth = Zend_Auth::getInstance();
            if (! $auth->hasIdentity())
            {
                //$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper(
                //'redirector');
                $flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');
                $flashMessenger->addMessage(array('message' => 'Sua sessão expirou. Favor logar novamente', 'status' => 'info'));
                //$this->_redirect('/auth/login/',array(‘code’ => 301));

                $r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
                $r->gotoSimple("index", "login", "auth");
                //header('Location: /auth/login/'); 
                //return;
            }
        }
    }
}

timeout.php

class Plugins_timeout extends Zend_Controller_Plugin_Abstract
{
    protected $_auth = null;
    protected $_acl = null;
    protected $_flashMessenger = null;
    protected static $_ZEND_SESSION_NAMESPACE_EXPIRATION_SECONDS= 900;



    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
    Zend_Session::start();
    $moduleName = parent::getRequest()->getModuleName();
    if($moduleName !='auth'){
    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > self::$_ZEND_SESSION_NAMESPACE_EXPIRATION_SECONDS)) {
    // last request was more than 30 minates ago
    session_destroy();   // destroy session data in storage
    session_unset();     // unset $_SESSION variable for the runtime

    $front = Zend_Controller_Front::getInstance();
    $_baseUrl=$front->getBaseUrl();
    Zend_Debug::dump(time() - $_SESSION['LAST_ACTIVITY']);
    header("Location:$_baseUrl/auth/login/index/timeout/1" );

    }else{
            $_SESSION['LAST_ACTIVITY']= time();
        }
    }   
    }

}

どんな助けでも大歓迎です。このアプリをできるだけ早く展開する必要があります。ありがとうございました。

4

1 に答える 1

0

私はあなたが欲しいと思います:

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$r->gotoSimpleAndExit("index", "login", "auth"); // Note the 'AndExit' suffix.

$r->gotoXXX()オブジェクトに正しいヘッダーとコードを設定するだけで$response、残りのディスパッチを続行できます。対照的に、AndExitパーツはすぐにクライアントに応答を送信して終了します。

AndExit[ただし、ローカル環境で必要とされない理由は明らかではありません...]

于 2013-05-31T03:36:08.667 に答える