Well, because CodeIgniter is garbage, and you should probably be using Yii.
If you want to fix CodeIgniter, open up system/core/Input.php and scroll down to line 248 to see this line:
$expire = time() - 86500;
Well that's silly ... someone decided to set the cookie's expiration date to yesterday!
If you change the '-' to a '+', your cookies will be good for 24 hours. If you want your cookie to be good for 40+ years, try this:
$expire = time() * 2;
This bug may have been fixed in later versions, but it certainly was not in mine.