oddly enough, corkboard adhesive has done the trick for me in the past. I've seen all sorts of goofy fixes over the years for this, though. If you want to go the mechanical route, upholstery shops sell these little corkscrew looking things for fabric. You just screw it in and yer done. It looks tacky, though. That process should be reserved for drooping headliners on old Ford LTD wagons if you ask me.
The trick is to give the adhesive enough time to set in this instance. I've torn them apart, glued and sandwiched them between two phone books for a good few days before if that helps.
then I suggest the adhesive route. The corkboard adheseive doesn't seep through the fabric like some other spray-ons. That's why I suggested it. Unfortunately there's no correct way to do these things unless you take them apart and re-do them. You can do the poke a hole in it bit, but that doesn't assure even coverage. Same goes with the headliners, unfortunately. Those are even worse. bleh.
This is a common problem. The friction element is plastic molded onto the visor shaft. It eventually cracks, losing its grip on the shaft. So, the visor gets droopy. Only way to truly fix that would be to take the visor apart and replace the friction element with a piece of rubber hose of similar diameter. My car's visors droop but I haven't fixed them yet. I did take a visor in a junkyard apart and that is how I learned how they are designed. For now I just stick a piece of cardboard into the headliner trim. The cardboard then traps the outer edge of the sunvisor in the upright position. Not pretty but it works (for now).