For a more even result, apply a wash coat of whatever you're using as a top coat before applying the stain. It will keep the grain from absorbing excessive amounts of stain and allow you more control over saturation.
If you're using oil stain, I suggest using either shellac or polyurethane as a wash coat. For poly, dilute 3poly:2turpentine and appply liberally, then wipe off the excess a few minutes later. Let cure for 12 hours minimum, then stain as desired.
Floppyshoes' foolproof polyurethane finish
(stolen from a furniture refinishing book I have)
Works with any wood that is not excessively oily or green)
1. Begin with a smooth, clean, dust-free surface. To achieve this, sand to 400 grit for hardwoods, wipe with half acetone-half water on a lint free cloth. Sand down the grain when still wet, then let dry for a few hours. Lastly, wipe clean with a tack cloth.
2. Apply a wash coat of whatever you're using as a top coat, in this case polyurethane or you can use shellac. A wash coat is a diluted version of the product, generally 3 parts finish to 2 parts solvent. For shellac, use 1 lb cut. Let the wash coat dry/cure for 12 hours minimum, then sand with 400 grit and clean the surface with a tack cloth.
3. Apply stain if desired, followed by another wash coat if you intend to use a filler. Sand after the wash coat.
4. Fill with appropriate wood filler if required, then apply another wash coat and sand again.
5. Apply 4-5 thin coats of polyurethane, letting each cure for 12 hours and sanding each lightly with 400 grit paper once they have cured. Always clean the surface with a tack cloth before applying another coat. After the first coat you may also consider wiping with alcohol to help keep oils from contaminating the next coat.
6. If you're using matte poly, you're done. If you're using gloss poly, your results may already look presentable. For that extra rich glossy look, you'll need to wet sand the last coat with 400, 1000 and 2000 grit sandpapers, then pumice, rottenstone, polish and wax the surface. This process is variable and would be the subject of another post.