0

次のセッションを持つ codeigniter で e コマース Web サイトを開発しています。

  1. 管理者ログイン
  2. ショッピングカート
  3. ユーザーログイン

現在、これら 3 つのセッションを異なるデータ セットで管理するメカニズムがわかりません。

コア php の session_name() で実現できることはわかっています。しかし、codeigniter を使用すると、少し混乱します。たくさんグーグルで検索しましたが、適切な答えが見つかりませんでした。

今後混乱を招かないように、codeigniter の複数のセッションを明確に理解したいと思います。チュートリアルへのリンクは素晴らしいでしょう。

4

4 に答える 4

1
$this->session->set_data('admin',$array_of_admin_data);
$this->session->set_data('user',$array_of_user_data);
$this->session->set_data('cart',$array_of_cart_data);

次に、各セクションのデータを取得しますか? 使用して

$this->session->userdata('admin');

なぜこれがうまくいかないのですか?

于 2012-08-23T06:41:32.133 に答える
1

Codeigniter のセッションはネイティブ PHP セッションとはまったく異なり、特にデータベースに保存されている場合は非常に安全です。PHP は を異なる変数として認識するため、codeigniter のセッションとネイティブ PHP セッションを一緒に使用できます。codeigniter セッション値の存在を確認したい場合は、

if(isset($this->session->userdata['course_id']))
{
    $this->data['course_id'] = $this->session->userdata('course_id');
} 

ネイティブPHPは次のよ​​うになりますが

if(isset($_SESSION['course_id']))
{
    $this->data['course_id'] = $_SESSION['course_id'];
} 
于 2012-09-26T11:49:53.687 に答える
1

私も電子商取引システムを開発していますが、同じ問題があります。データベースにシリアル化されたデータとして保存されているすべてのデータを管理するのは好きではありませんでした。特にカート/バスケットの場合はそうではありません。

私はCIとstackoverflowにはまったく慣れていませんが、ドキュメントに書かれているようにci_sessionテーブルを設定して、CIセッションの一貫性とセキュリティを維持することを考えました。次に、管理するセッション データごとに、セッション変数に参照 ID を 1 つだけ追加します。カートの例:

$unique_cart_id = random_string('unique');
$this->session->set_userdata('cart_id', $unique_cart_id);

そして今、すべてのデータを含む別の「バスケット」テーブルでcart_idを参照しています。例えば:

CREATE TABLE basket (
  id int(11) NOT NULL auto_increment,
  cart_id varchar(32) default NULL,
  timestamp timestamp NULL default NULL,
  price float(10,2) default NULL,
  title varchar(100) default NULL,
  serialized_data text,
  product_id int(11) default NULL,
  PRIMARY KEY  (id)
)

誰かがバスケットに何かを追加するたびに、セッション変数から cart_id を取得します。

$cart_id = $this->session->userdata('cart_id');

$cart_id小さな挿入スクリプトを記述して、「バスケット」テーブルに他のカート データと一緒に保存します。

$data = array(
   'cart_id' => $cart_id,
   'title' => $product_title,       
   'product_id' => $product_id,
   'price' => $price,
   'serialized_data' => serialize(array('what ever you need else'))
);

$this->db->insert('basket', $data); 

誰かがバスケットを表示したい場合は$cart_id、セッション変数から再度取得し、cart_id と一致するデータベースをクエリします。

$this->db->query("SELECT * FROM basket WHERE cart_id = ?", array($cart_id));

また、他のセッション データ、管理者およびユーザー ログインにも同じ原則を使用します。したがって、ユーザーごとに 1 つのセッション Cookie しか保持しませんが、データベース内で各タイプのセッション データを個別に管理できます。

これはアイデアの大まかな内訳にすぎません。お役に立てば幸いです。

于 2013-05-25T07:14:19.377 に答える
-1

メソッドを使用userdata()すると、セッションの作成中に保存したフィールドを取得できます。

たとえば、 の$array_of_admin_data arrayような情報を保持するを渡しますuserType。この値を取得したい場合は、次userdata()のように呼び出す必要があります。

$this->session->userdata('userType');

これが役立つことを願っています。

于 2014-11-21T08:45:38.097 に答える