1

テストケース:

Firefox 16.0.1

MAC OSX ライオン

以下は最新のSafari、Chromeで動作します。Firefox ではありません。

ポイントは、ユーザーの初回訪問時に動画を表示することです。最初の訪問と異なる場合、ビデオは表示されません。

したがって、この Web アプリケーションでは、次のように設定しました。

コントローラー/インデックス:

Yii::app()->request->cookies['first'] = new CHttpCookie('first', (isset(Yii::app()->request->cookies['first']) ? Yii::app()->request->cookies['first']->value+1 : 1));
            $cookie = Yii::app()->request->cookies['first'];
                    $cookie->expire = time() + (60*60*24*7);


Yii::app()->session['first'] =  (isset(Yii::app()->session['first']) ? Yii::app()->session['first']+1 : 1);

main.php:

 'session'=>array(
  'timeout'=>604800
 ),

ただし、Firefox を閉じて再度開くたびに、Cookie とセッション値がリセットされます。

4

2 に答える 2

1

あなたのセッションはクッキーです。「セッション Cookie」は、ブラウザーが閉じると期限切れになります (これはクライアント側で発生するため、サーバー側のタイムアウトに関係なく)。

適切な有効期限が設定されている場合、リクエスト -> Cookie は問題ないはずです。ただし、クライアント ブラウザがプライバシー モードに設定されている場合、これらも削除されます。

編集有効期限のあるCookieを実際に設定したことはないようです。私のPHPは少し錆びていますが、次のことは正しいはずです。

// get the cookie value if it exists
$oldVal = isset(Yii::app()->request->cookies['first']) ? Yii::app()->request->cookies['first']->value : 0;
// set the cookie
$cookie = new CHttpCookie('first', $value);
$cookie->expire = time()+60*60*24*180; 
Yii::app()->request->cookies['first'] = $cookie;
// other page logic
if($oldVal == 0) {
    // show the video
}
于 2012-10-24T18:31:03.567 に答える
0

Yiiおそらくどこかに問題があります。setcookie()ブラウザの問題ではないことを確認してください。

あなたがやっているので..

Yii::app()->request->cookies['first'] = new CHttpCookie(....

既存の Cookie を新しい Cookie に設定しているようです。

if (!isset(Yii::app()->request->cookies['first'])) {

     $cookie = new CHttpCookie('first', 1);
     $cookie->expire = time() + (60*60*24*7);

}
于 2012-10-24T19:00:59.693 に答える