1

测试用例:

火狐 16.0.1

MAC OSX 狮子

以下适用于最新的 Safari、Chrome。不是火狐。

重点是为第一次用户访问显示视频。如果与第一次访问不同,则不显示视频。

因此,在此 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”会过期(无论您设置的服务器端超时,因为这发生在客户端)。

设置适当的到期日期时的 request->cookies 应该没问题。但是,如果客户端浏览器设置为隐私模式,这些也会被删除。

编辑看起来你从来没有真正设置过过期日期的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 回答