Friday, January 13, 2012

Do I need to write a custom session class for CodeIgniter?


I cannot seem to get CI's session library to function the way I want it to. Essentially, I am storing 2 different categories of data within the sessions. The data within the 2 categories may contain the same value. Right now my attempt to add a key => value pair to the session is failing, as it is only allowing 1 key => value pair to be associated with the array. It overrides itself each time I do a post.




$arr = array(
'favorite_products' => array(),
'viewed_products' => array()
);


$arr["favorite_products"][] = $fav_id;


$this->session->set_userdata($arr);



This is what the array looks when I print_r it:




Array ( [favorite_products] => Array ( [4f1066c2b7fff] => 1648406 ) [viewed_products] => Array ( ))



Am I doing something wrong, or is this just the way CI's session library works?

1 comment:

  1. Make sure you are destroying your session between attempts, but this code should work just fine...

    $arr = array(
    'favorite_products' => array(),
    'viewed_products' => array()
    );


    $arr["favorite_products"][] = $fav_id;
    $arr["favorite_products"][] = 033333; // another id


    $this->session->set_userdata($arr);


    should give you...

    Array (
    [favorite_products] => Array (
    [0] => 1648406,
    [1] => 033333
    ),
    [viewed_products] => Array ()
    )


    If you are trying to do this between requests...

    // if it doesn't already exist in the session, create an empty array.
    if( ! ($favorite_products = $this->session->get_userdata("favorite_products")))
    {
    $favorite_products = array();
    }

    $favorite_products[] = "new id or info";

    $this->session->set_userdata("favorite_products", $favorite_products);

    ReplyDelete