On camping trips I fill a Nalgene water bottle (sturdy!) with boiling water at bedtime, wrap it in a towel (tied) and put it in the foot of my sleeping bag. Lasts for hours.

I have also done this with a zippo pocket warmer with good results. If one was good, I reasoned, two would be better - not so. There's enough air exchange in the bag for one zippo to function, but not two. They do consume oxygen and the two together, put each other out.

I've seen the click-heat bags, they work on a pretty neat principle. Use them over and over, recharging them by putting them in boiling water until they get liquidy. They solidify as they release stored heat. Not the same as the Nalgene bottles, as they remain room temp until clicked.