惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
S
SegmentFault 最新的问题
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
AI
AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
U
Unit 42
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
H
Help Net Security
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Heimdal Security Blog
博客园 - 聂微东
S
Securelist
大猫的无限游戏
大猫的无限游戏
Cloudbric
Cloudbric
Cisco Talos Blog
Cisco Talos Blog

博客园 - sun@live

两段代码 <收藏>提高Web性能的14条法则(详细版) MOSS与业务系统的集成 之 单点登录 MOSS与业务系统的集成 之 自定义Membership实现Forms方式验证 手机归属地数据—采集 .Net数据源自定义参数 JavaScript和CSS速查手册 序列化一个字符串到CDATA元素(.NET 1.1) Sandcastle工具SandcastleBuilder 清除字符串数组中,重复元素 - sun@live - 博客园 Windows Live Writer 写的一个双向选择器(JS) 论坛中,用户权限解决方法 (原创)一个改自java的代码统计工具 [学习日志]EyasBlog控件部分已基本完成-2005-12-03 学习日志(blog日历控件)-2005年11月12日 学习日志(Blog架构)-2005年11月09日 学习日志-2005年11月09日 学习计划-2005年11月07日
Web2.0用户注册,激活,密码找回模块
sun@live · 2006-01-03 · via 博客园 - sun@live

2006-01-03 21:02  sun@live  阅读(1092)  评论()    收藏  举报

在web2.0中,都采用Email作为登陆ID,账号模块主要由以下功能组成

  • 登陆验证(在激活前提下,才可登陆)
  • 用户注册
  • 账号激活
  • 重发激活邮件
  • 密码找回

为实验这模块,我们可以提出这样的解决方案:
A.数据库设计

表Tao_Users存放用户信息,
    主要字段:
        UserID            用户唯一标识
        Email               用户Email 
        NickName      用户昵称
        Password        用户密码
        State               状态(0为未激活,1为已激活)
        RegTime          注册时间(可以用来删除数据库中长时间未激活的账号)
       
表Tao_Valid存放验证信息
        主要字段:
        GUID                全局唯一标识符
        Type                  验证类型(1为账号激活时用,2为密码找回时用)
        UserID               用户唯一标识
        AddTime            添加时间(可以定期删除长时间未用数据)

B.个功能实现(这里主要写有关存储过程)
    用户注册的存储过程:

--用户注册
   CREATE PROCEDURE Tao_UserReg
(
    
@Email NVarChar(100),
    
@Password NVarChar(50),
    
@NickName NVarChar(50),
    
@GUID NVarChar(50)=null OutPut  --返回激活码,发往用户邮箱
)
AS
if not exists(select * from Tao_Users where Email=@Email or NickName=@NickName)
begin
    
Insert Into Tao_Users(Email,NickName,Password,RegTime)
    
Values(@Email@NickName@Password,GetDate())
    
    
Select @GUID = NewID();--由SQL生存一个GUID
        --插入验证信息表
    Insert Into Tao_Valid (GUID, UserID,Type,AddTime)
    
Values (@GUID@@Identity,1,GetDate())
end
GO

数据库返回一个GUID后,我们再往用户邮箱中发送验证Email,用户收到激活邮件后,进行账号激活

--激活账号,返回用户信息(自动登陆系统)
CREATE PROCEDURE Tao_UserActive
(
    
@GUID NVarChar(50)
)
AS
declare @UserID int   --存放用户ID
Select @UserID=UserID From Tao_Valid Where GUID=@GUID And Type=1
    --删除验证表中记录
Delete From Tao_Valid Where GUID=@GUID And Type=1
    --更新用户状态
Update Tao_Users Set State=1 Where UserID= @UserID
    --返回用户信息,自动登陆
Select * From Tao_Users Where UserID= @UserID And State=1
GO

--重发激活码
CREATE PROCEDURE Tao_UserAgainActive
(
    
@Email NVarChar(100),
    
@GUID  NVarChar(50) Output
)
AS
declare @UserID int
--从用户表中根据Email,查出UserID
Select @UserID=UserID 
    
From Tao_Users 
    
Where State=0 And Email=@Email
--如果找到有此未激活用户
if NOT(@UserID=NULL)
Begin
    
--删除原有激活信息
    Delete From Tao_Valid Where UserID=@UserID
    
Select @GUID=NewID() --重新生存ID
    Insert Into Tao_Valid 
           (GUID,UserID,Type,AddTime) 
    
Values (@GUID,@UserID,1,GetDate())
End

找回密码部分(返回GUID后,发往用户邮箱)

--发送找回密码验证码
Create Procedure Tao_UserCPwdCode
(
   
@Email  NVarChar(100),
   
@GUID   NVarChar(50)OutPut
)
AS
   
Declare @UserID int
   
--从用户表中查出UserID
   Select @UserID=UserID
       
From Tao_Users
       
Where State=1 And Email=@Email
   
--如果此用户
   If Not(@UserID=Null)
   
Begin
        
--删除原有更改密码验证码
        Delete From Tao_Valid Where UserID=@UserID And Type=2
        
Select @GUID=NewID()
    
--插入新验证码
        Insert Into Tao_Valid
               (GUID,UserID,Type,AddTime)
        
Values(@GUID,@UserID,2,GetDate())
   
End


密码重设部分,根据用户邮箱中的更改密码链接GUID,获取用户昵称,进入更改密码页面,

--密码找回
CREATE PROCEDURE Tao_UserCPwd 
(
    
@GUID NVarChar(50)=null,
    
@NewPwd NVarChar(50)=null
)
AS
if(@NewPwd=null)
--返回用户昵称,UI中进入重设密码页面
begin
    
Select U.NickName From Tao_Users AS U,Tao_Valid AS V
    
Where V.UserID=U.UserID AND V.GUID=@GUID
end
--更改用户密码
Else Begin
    
declare @UserID int
    
Select @UserID=UserID From Tao_Valid Where GUID=@GUID And Type=2
    
Delete From Tao_Valid WHere GUID=@GUID And Type=1
    
Update Tao_Users Set State=1,Password=@NewPwd Where UserID= @UserID
    
Select * From Tao_Users Where UserID= @UserID
End
GO

这样就完成了整个账户管理部分模块.