I have very deep set eyes, you can't even see my eyelids when my eyes are open! Plus my skin (including my lids) is pretty oily. So without any sort of base my eyeshadow and eyeliner are gone in an hour! (Or rather, it's all in one big clump in the crease of my eye!)
However I found an inexpensive solution that seems to work with me -- I put a thin layer of foundation on my eyelids (not too much or it will get all greasy and stuff!) and then a thin layer of regular loose face powder, then apply the eyemakeup on top of the powder. I've tried a few brands of foundation and powder and I use Maybelline Expert Eyes eyeshadow, and it always seems to work! (I did my own makeup for my wedding, and this technique made my eye makeup last all day -- I have pictures to prove it!
)
On days when I'm in a hurry, I apply only powder to my lids and then put only eyeliner on (no shadow). That also makes it last all day -- when I used to wear only eyeliner with no base, it also came off within an hour due to my deep-set eyes!