首页 新闻 会员 周边 捐助

网站用户更新EMAIL和用户注册添表检查EMAIL是否存在的数据库并发的问题。

0
悬赏园豆:20 [已解决问题] 解决于 2010-12-03 10:30

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分钟的间隔,如果这三分钟之内,有其他人抢注了你的用户名, 网站要怎样提示呢? 难道说刚刚提示可以, 怎么点击按钮后就不可用了???

WoodsonBin的主页 WoodsonBin | 菜鸟二级 | 园豆:230
提问于:2010-11-14 01:30
< >
分享
最佳答案
0

这是正常的。前段做的js验证,利用ajax做的验证是不可靠的,

这只是为了提高用户体验,如果设计安全性比较高的,最好在数据层再做一次验证。

收获园豆:15
clound | 菜鸟二级 |园豆:481 | 2010-11-15 11:57
关键是怎样优雅的处理这个冲突。 你没有没见过大型网站注册,你刚开始被提示可以用这个用户名,点BUTTON提交后又告诉你不能用了?我重来没遇到过,想GMAIL, HOTMAIL, SINA什么的,都没出过这种问题,应该是有其他处理方法的。
WoodsonBin | 园豆:230 (菜鸟二级) | 2010-11-15 23:19
你可以在用户查询该用户名是否存在的时候,插入到一个待创建用户表, 用来保存该用户名,e-mail等信息。然后定期清理该表中信息。
clound | 园豆:481 (菜鸟二级) | 2010-11-16 08:51
其他回答(2)
0

提示已被使用呗,再说EMAIL这个东西,一般人都只会输入自己的EMAIL吧,输别人的EMAIL,那就不是正常用户了.

收获园豆:5
I,Robot | 园豆:9783 (大侠五级) | 2010-11-14 09:32
关键是怎样优雅的处理这个冲突。 你没有没见过大型网站注册,你刚开始被提示可以用这个用户名,点BUTTON提交后又告诉你不能用了?我重来没遇到过,想GMAIL, HOTMAIL, SINA什么的,都没出过这种问题,应该是有其他处理方法的。
支持(0) 反对(0) WoodsonBin | 园豆:230 (菜鸟二级) | 2010-11-15 23:19
0

验证后,发送激活邮件,这样可以有一定延迟,看谁先点验证咯。

AppleSeeker(冯峰) | 园豆:210 (菜鸟二级) | 2010-11-14 11:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册