One that worked for me is having a mechanical counter of some sort (like lap couter or just miniature code lock so you can use it as a counter), which you reset every morning and increment during the day every time after you ask yourself "Am I dreaming?" and doing some basic "reality check" (e.g. trying to breathe in through your nose when you pinch it, or checking clocks twice in a succession and validating that it makes sense, or just looking at your hands). The goal is to consistently do a number of reality checks during your waking life, which inevitably will increase the chance that you will do it in your dream. That will likely would cause you to wake up immediately for couple of times, but then you'll get used to it. It works simply because "if you don't ask yourself that you are dreaming during your waking life, what is the chance that you'll ask yourself it during sleep?".
There are number of other and more advanced techniques that borderline with "magic" to me, like falling asleep without loosing conciousness (and then waking up the same way), but I had this experience only a couple of times I guess.