Reading through the suggestions, yes an attack alarm with possibly stun for a few seconds but not much more than that, hairspray or deodorant (especially the cheaper brands as they completely take your breath away - let alone blind you lol)
I did see or hear somewhere that the best possible thing to do is to mark an assailant in the face (most distinguishable part that cannot be covered very easily when police make their enquires...!) This is probably going to sound disgusting but I would personally (if it was in a life and death situation) bite a chunk out of their nose, ear, lip or a poke in the eye to give them a black eye.
Also......Never turn your back on an injured assailant, never gloat over the person you just floored. For all you know, he may be acting or taking a breather.
Hope this may help
Tamzin