我有一个CakePHP电子商务网站,它与第三方网站互动,允许用户自定义他们的产品,然后将数据发送回我们的网站,将其添加到他们的购物篮中。
然而,当第三方网站将产品信息发送到我们的网站时,当前会话数据似乎无法在Windows 7和8下的IE上访问我们的CakePHP代码,结果是产品最终被分配到新篮子而不是客户目前的篮子。
这一切都适用于任何其他浏览器/操作系统组合。
public function persistBasket() {
$inSession = $this->Session->check('Basket.id');
$inCookie = $this->Cookie->check('Basket');
echo "insession ".$inSession;
echo " cookie ".$inCookie;
if ($inSession) {
$basketId = $this->Session->read('Basket.id');
if (!$inCookie || $basketId != $this->Cookie->read('Basket')) {
$this->Cookie->write('Basket', $basketId);
}
} else if ($inCookie) {
$basketId = $this->Cookie->read('Basket');
$this->Session->write('Basket.id', $basketId);
}
echo " basketid ".$basketId;
if (isset($basketId)) {
// Set Basket model ID
$this->Controller->Basket->id = $basketId;
}
}
public function setupBasket() {
$basketId = $this->Controller->Basket->setupBasket();
if ($basketId !== false && $basketId !== true) {
$this->Session->write('Basket.id', $basketId);
}
}
在Windows 7/8上,当此代码通过第三方网站运行时,它会以“insession cookie”结束(然后出现错误,因为$ basketid未设置)
当用户实际上在网站上时,我们得到“insession 1 cookie 1 basketid 100”