[已解决]操作COOKIES的问题

1.在对$cookies['shoppingCart']->expire = time()+606024*180;第一次赋值时,报这样的错误 :Indirect modification of overloaded element of CCookieCollection has no effect

但刷新页面后,就正常了,需要如何解决呢?

2.$cokkies['shoppingCart']的内容如下:

[shoppingCart] => CHttpCookie Object

                (

                    [name] => shoppingCart

                    [value] => Array

                        (

                            [0] => Array

                                (

                                    [productName] => 产品一

                                    [id] => 1

                                    [productNum] => 2

                                )

                            [1] => Array

                                (

                                    [productName] => 产品一在

                                    [id] => 3

                                    [productNum] => 1

                                )

                        )

                    [domain] =>

                    [expire] => 0

                    [path] => /

                    [secure] =>

                    [httpOnly] =>

                    [_e:private] =>

                    [_m:private] =>

                )

不知道CHttpCookie是否提供了去掉VALUE中某一个元素的方法?(比如删除第一个元素)?

先在这里感谢大家的帮助!

你的PHP版本是什么?

试试下面的代码:



$cookie=new CHttpCookie('shoppingCart',array());


$cookie->expire=...;


Yii::app()->request->cookies['shoppingCart']=$cookie;


value是你自己管理的,cookie本身不提供方法特殊处理。

$cookie=new CHttpCookie('shoppingCart',$cookiesValue);$cookie->expire=1;是可以正常执行的,

但到这句时Yii::app()->request->cookies['shoppingCart']=$cookie;

出错,错误信息如下:

================================

PHP Error

Description

setcookie() expects parameter 2 to be string, array given

Source File

D:\work\workspace_zend\release\framework\web\CHttpRequest.php(742)

00730:    }

00731:

00732:    /**

00733:      * Sends a cookie.

00734:      * @param CHttpCookie cook to be sent

00735:      */

00736:    protected function addCookie($cookie)

00737:    {

00738:        $value=$cookie->value;

00739:        if($this->_request->enableCookieValidation)

00740:            $value=Yii::app()->getSecurityManager()->hashData($value);

00741:        if(version_compare(PHP_VERSION,'5.2.0','>='))

00742: setcookie($cookie->name,$value,$cookie->expire,$cookie->path,$cookie->domain,$cookie->secure,$cookie->httpOnly);

00743:        else

00744:            setcookie($cookie->name,$value,$cookie->expire,$cookie->path,$cookie->domain,$cookie->secure);

00745:    }

忘记说了,我的PHP是5.2.6的

你需要把value序列化成string。

我用下边的方法存储COOKIE,但存储正常,读取时就为null,不知道为什么?我需要在哪里改进呢?,还请多多帮忙。

我在buyBusiness中输出cookie值,但得到的是空值。

代码如下:

public function actionBuy()


{


	if (isset($_GET['id']))


	{


		$id = $_GET['id'];


		$this->buyBusiness($id);


	}


	


	//$this->redirect(array('ShoppingCart'));		


}








private function buyBusiness($id)


{


	$cookies = $this->getShoppingCartCookie();


	var_dump($cookies);


	if ($cookies==NULL) 


	{


		$this->buySave($id, $this->shoppingUnitNumber);


	}


	else 


	{


		$cookiesValue = $this->getShoppingCartCookie();


		$cookiesTotal = count($cookiesValue);


		$index = $cookiesTotal;


		


		for ($cookiesIndex =0; $cookiesIndex<$cookiesTotal; ++$cookiesIndex)


		{


			if ($cookiesValue[$cookiesIndex]['id']==$id)


			{


				$productNum = $cookiesValue[$cookiesIndex]['productNum']+1;


				$index = $cookiesIndex;


				break;


			}


		}





		$this->buySave($id, $this->shoppingUnitNumber, $index);	


	}		


}








private function buySave($id, $productNum=1, $index=0)


{


	$productName = $this->getProductNameById($id);


	$cookies[$index] = array(


		'id' => $id,


		'productName' => $productName,


		'number' => $productNum 


	);





	$this->setShoppingCartCookie($cookies);


}


	





private function setShoppingCartCookie($cookiesValue)


{


	$cookie=new CHttpCookie('shoppingCart',serialize($cookiesValue));


	$cookie->expire=1;


	Yii::app()->request->cookies['shoppingCart']=$cookie;		


}








private function getShoppingCartCookie()


{


	$cookie = Yii::app()->request->cookies['shoppingCart'];


	


	if ($cookie===NULL)


	{


		return $cookie;


	}


	else 


	{


		return unserialize($cookie->value);


	}


}

我又试了一下,是如果在同一个action里就可以正常获取,但进行redirect后,在另一action里就获取到的是null了,不知我的代码需要如何组织呢?还请指教!

谢谢!

我在方法private function setShoppingCartCookie($cookiesValue)中又添加了设置域名属性,还是不行,代码如下:

private function setShoppingCartCookie($cookiesValue)

  {

      $cookie=new CHttpCookie('shoppingCart',serialize($cookiesValue));

      $cookie->domain='test.com';

      $cookie->expire=1;

      Yii::app()->request->cookies['shoppingCart']=$cookie;     

  }

经热心的群友指点:找到问题所在了:

再次修改方法private function setShoppingCartCookie($cookiesValue)

修改后的内容如下:

private function setShoppingCartCookie($cookiesValue)

  {

      $cookie=new CHttpCookie('shoppingCart',serialize($cookiesValue));

      $cookie->domain='test.com';

      $cookie->expire=time()+1;

      Yii::app()->request->cookies['shoppingCart']=$cookie;     

  }