24

Magento 拡張機能を作成しました。拡張機能へのアクセスを実装したい。拡張機能はフロントエンドにページを作成し、管理者のみがそのページにアクセスできるようにします。したがって、基本的には、管理者がフロントエンド ページにログインしているかどうかを検出するものが必要です。

私はいくつかの解決策を試しましたが、うまくいくようです。

if(Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn()) echo 'logged in'; else echo 'not logged in';

管理者がログインしているかどうかをフロントエンドで確認する

Mage::getSingleton('core/session', array('name'=>'adminhtml'));
$adminSession = Mage::getSingleton('admin/session');
$adminSession->start();
if ($adminSession->isLoggedIn()) {
   echo 'logged in';
}
4

12 に答える 12

3

テンプレート/phtml ファイル内、および/またはブロックのクラス内で機能させようとしている場合は、苦労するでしょう。主な理由は、magento がパフォーマンスの目的で PHTML ブロックを (積極的に) キャッシュし、特に Cookie チェックに関連するプログラム フロー制御ステートメントを元に戻すためです。その理由を直接的/長く/詳細に説明することはできませんが、それが私が何度も何度も遭遇した方法です.

ただし、ソリューションは正しいはずですが、コントローラーはキャッシュされないため、前述の積極的なキャッシュを回避するために、コントローラーの preDispatch メソッド内でチェックを行う必要があります。(リンクした質問のニックのソリューションに示されています。):

// Ensure we're in the admin session namespace for checking the admin user..
Mage::getSingleton('core/session', array('name' => 'adminhtml'))->start();

$admin_logged_in = Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn();

// ..get back to the original.
Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();

PHTML ファイルまたは名前付きブロック内で上記のチェックを実行する必要がある場合は、次のコードを参照して、ブロック レベルのキャッシュを無効にし、機能させる方法を確認してください。私が以前にしたことは、フッターブロックのキャッシュを無効にすることでした(phtmlではなく子ブロックに
特定のCookieをチェックするコードが含まれています)

まず、ブロック呼び出し (local.xml、またはモジュール レイアウト更新 xml、またはレイアウト更新を行うことができる場所で見つかります。私はカスタマイズをモジュールに分割することを好むので、間違いなくモジュール レイアウト更新 xml を使用する方法です) :

<reference name="footer">      
   <action method="unsetData"><key>cache_lifetime</key></action>
   <action method="unsetData"><key>cache_tags</key></action>
   <block type="newsletterpopup/popup" name="newsletterpopup_footer" template="newsletterpopup/popup.phtml"/>
</reference>

そして、これはニュースレターポップアップのブロッククラスです:

<?php
class Launchpad_Newsletterpopup_Block_Popup extends Mage_Core_Block_Template {
    public function canRender() {
         // Check if cookie exists here       
    }
    public function afterRender() { // if block has rendered, this is called.
        // Set cookie, if it doesn't exist here.
    }
}

phtml は次のようになります。

<?php if($this->canRender()): ?>
   // stuff
<?php endif; ?>

幸運を!

于 2013-04-14T13:37:13.180 に答える
1

これは非常に単純ですが、推奨される解決策ではありません。私自身、これを行うために何時間も費やしています。Windows ベースのサーバーについては、以下の解決策を試してください。

$sessionFilePath = Mage::getBaseDir('session').DS.'sess_'.$_COOKIE['adminhtml'];
$sessionFile     = file_get_contents($sessionFilePath); 
$exp_cookie   = explode(';',$sessionFile);
if(count($exp_cookie)   >   100)
{
  return "login";
}
return "expire";    

Linux ベースのサーバーについては、以下のソリューションを試してください。

$sessionFilePath = Mage::getBaseDir('session').DS.'sess_'.$_COOKIE['adminhtml'];
$sessionFile     = file_get_contents($sessionFilePath); 
$exp_cookie   = explode('--',$sessionFile)
if(count($exp_cookie)   >   10)
{
  return "login";
}
return "expire";

ありがとう、カシフ

于 2014-02-03T11:45:41.097 に答える
1

このコードは機能します

//get the admin session
Mage::getSingleton('core/session', array('name'=>'adminhtml'));

//verify if the user is logged in to the backend
if(Mage::getSingleton('admin/session')->isLoggedIn()) {
  //do stuff
}
else
{
  echo "404 page not found";
}

また

$adminsession = Mage::getSingleton('admin/session', array('name'=>'adminhtml'));

if($adminsession->isLoggedIn()) {
    //do stuff
} else {
    echo "404 page not found";
}

$_SESSION変数をダンプしようとしましたか? 正しい軌道に乗るのに役立つかもしれません。

于 2013-04-17T09:50:26.457 に答える
0

使用できるキー:

// Ensure we're in the admin session namespace for checking the admin user..
Mage::getSingleton('core/session', array('name' => 'adminhtml'))->start();

$admin_logged_in = Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn();

// ..get back to the original.
Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();

それはcontroller必須ですextends Mage_Adminhtml_Controller_Action

preDispatch関数でこのコードを使用できるよりも。

のセクションでrouters、このコントローラーの をセットアップします。adminconfig.xml

于 2013-04-14T17:28:27.820 に答える
0
require_once $dir.'app/Mage.php';
umask(0);

$apps = Mage::app('default');
Mage ::getSingleton('core/session', array('name'=>'adminhtml'));
$adminSession = Mage::getSingleton('admin/session');
$adminSession->start();
if ($adminSession->isLoggedIn()) {
   //echo "logged in";
} 
 else { 
      //echo "Not logged in";
      exit();
 }?> 
于 2013-11-03T21:29:33.220 に答える