0

サイトにアクセスするユーザーごとに一意の ID を作成しようとしています。私は Zend と MVC パターンに比較的慣れていないため、Cookie をどこにどのように設定する必要があるのか​​ わかりません。

PHPは非常に簡単です:

if(!isset($_COOKIE['mx_uid'])){
   $expire = time()+60*60*24*30;
   setcookie('mx_uid', uniqid('mx_'), $expire);
}

$lxid = $_COOKIE['mx_uid'];

これをビューに配置しようとしたところ、新しいページが読み込まれるたびに Cookie が再生成されるという問題が発生したため、サイトの 20 ページに移動すると、20 個の Cookie が存在します。

さらに、JavaScript スニペットが Cookie の内容をキャプチャするため、更新せずに各ページで "$lxid" 変数をインラインで使用する必要があります。

Zend でこのように Cookie を使用した人はいますか?

4

2 に答える 2

1

1 つのセッション中に 1 回 Cookie を設定する必要がある場合は、それらを frontController プラグインに配置します。app.ini に追加します
resources.frontController.plugins.a.class = "YourNamespace_Plugin_Cookies"

そして、プラグインは次のようになります

class YourNamespace_Plugin_Cookies extends Zend_Controller_Plugin_Abstract  
{  
  public function preDispatch(Zend_Controller_Request_Abstract $request)  
  { 
      $cookie = $request->getCookie('mx_uid');  
      if(empty($cookie)){  
           setcokkie('mx_uid',$lxid,$expire, '/');  
      }  
  }  
}  
于 2012-08-09T20:57:54.567 に答える
0

Cookie パスも設定する必要があります (4 番目のパラメーター):

setcookie('mx_uid', uniqid('mx_'), $expire, '/');

Cookie を設定しているスクリプト内では、Cookie にアクセスできない場合があることに注意してください (つまり、次にアクセスするページまで機能しません)。したがって、より良いロジックは次のようになります。

if (isset($_COOKIE['mx_uid'])){
    $lxid = $_COOKIE['mx_uid'];
} else {
    $lxid = uniqid('mx_');
    $expire = time()+60*60*24*30;
    setcookie('mx_uid', $lxid, $expire, '/');
}

$lxid常に値が含まれるようにします。

于 2012-08-09T20:46:15.960 に答える