I used to get them constantly, pretty much had at least one all the time. I heard all the "reasons", acidic foods, vitamin deficiencies, caused by a virus, etc. Nothing ever helped. Then I switched toothpaste. From a grocery/drug store brand (not a specific brand, colgate, crest, aim, store brand) to a natural kind. I wasn't expecting it to help, and I didn't realize it had until I went on vacation and used a travel tube of colgate or crest (I don't remember which), and got a canker sore the same day. It still happens if I am caught somewhere with only crappy toothpaste. I think it is from the detergents in them, primarily Sodium Lauryl/Laureth Sulfate. I can't use shampoo or hand soap or anything else with those ingredients either.