1. 用户的EMAIL必须是唯一的, 不允许重复。
2. 用户注册的时候会验证注册的EMAIL是否可用。
3. 用户登录以后可以随时更新EMAIL地址。
这样就有一个问题: 如果用户A在注册的时候验证 A@SINA.COM可用, 用户B已经登录在更新他的EMAIL地址为A@SINA.COM, 也是提示可用。 这个时候两人都还没有提交。验证都是用AJAX和后体连数据库判定的。
问题: 如果两人同时提交表单: 在我的注册和更新的SQL语句中, 我都有用来做最后的防御:
IF EXISTS(SELECT * FROM USER WHERE EMAIL = @EMAIL)
UPDATE.......... 或者 INSERT.......
这样两人其中必有一人不能成功更新,请问大家是怎样处理这类问题的?
大家注册博客园的时候,开始AJAX提示你的用户名可用, 然后你在慢慢填写其他信息,在最后提交之前,大概有3分钟的间隔,如果这三分钟之内,有其他人抢注了你的用户名, 网站要怎样提示呢? 难道说刚刚提示可以, 怎么点击按钮后就不可用了???
这是正常的。前段做的js验证,利用ajax做的验证是不可靠的,
这只是为了提高用户体验,如果设计安全性比较高的,最好在数据层再做一次验证。
提示已被使用呗,再说EMAIL这个东西,一般人都只会输入自己的EMAIL吧,输别人的EMAIL,那就不是正常用户了.
验证后,发送激活邮件,这样可以有一定延迟,看谁先点验证咯。