User 登入成功後會更換 Session Id, 可以設定成不換嗎?

要建置一個購物車系統,先選擇使用 yii 來開發,也不確定是否為適當的決定

使用版本為 yii-1.1.13.e9e4a0

目前碰到一個狀況就是

系統在會員登入前是用 session id 來記錄購物清單

當要進入結帳流程時要登入

但登入後清單就不見了

這時我才發現在 CWbeUser.changeIdentity() 做了重置 session id 的動作

不知道為何要這樣處理或許是安全性的考量

請問有辦法單純透過設定停掉這樣的特定嗎?

或是有較好的處理架構可供建議呢?

changing sessionid after login

這篇也有相同的討論

針對登入成功後 yii 框架會把 Session Id 重新設定的特性

說說我的想法

首先不能有先入為主的觀念,認為這樣特性是錯誤的

會認定是錯誤的朋友應該就是以往都習慣直接應用 session_id 的開發者

我認為 yii 是經過設計的框架,只有入鄉隨俗去適應與理解

雖然 session id 會被更換,不管是基於什麼原因

但至少更換前設定在 $_SESSION 內的資料在更換後都還是保留下來

所以可以換個方式處理,例如:




class CartController extends Controller

{

  public function actionAjaxAddToCart()

  {

    if(!isset(Yii::app()->session['cart_key']))

    {

      Yii::app()->session['cart_key'] = session_id(); //將目前 Session ID 保存起來

    }

    $cart_key = Yii::app()->session['cart_key'];

    $product_id = $_GET['product_id'];

    $cart = Cart::model()->findByAttributes(array(

      'cart_key'=>$cart_key,

      'product_id'=>$product_id,

    ));

    if($cart===NULL)

    {

      //新增

    }

    else

    {

      //增加數量

    }

    ...後略...

  }

}



這樣就可以用 $cart_key 來解決問題了,而不是也不需要自己繼承 Class 或改寫 framework。

是否可以考虑使用 Yii::app()->user->setState(… ); / Yii::app()->user->getState(… ); 代替直接 session 操作?

稍微看了 Class ref.

應該是更好的操作方式

不過還不清楚具體的用意

請問,不直接操作 sesion 這也是 yii 的特性嗎?