2011-01-05 96 views
0
CREATE TABLE Member 
(
    memberID int IDENTITY (2480,39) PRIMARY KEY, 
    memberName nvarchar(70) NOT NULL, 
    password nvarchar(30) NOT NULL, 
    eMail  nvarchar(100) NOT NULL, 
    notify  bit NOT NULL, 
    isActive bit NOT NULL, 
    lastLogin datetime DEFAULT GetDate(), 
    dateCreated datetime DEFAULT GetDate() NOT NULL 
); 

一旦用户填写注册表单:注册是通过电子邮件需要激活该由

成员名称,密码,电子邮件和选中/取消通知框,然后点击提交。这些值将存储在上表中,isActive等于False。

电子邮件将被发送给用户进行激活,一旦激活,isActive将等于true。

1.如何将激活链接发送至电子邮件,然后单击链接后将isActive更改为True?我试图解决它,我只是没有得到它。你能帮忙吗?

2.是否必须添加新的列/更改模式才能实现步骤1.如果有,请指教。

回答

3

一个简单的方法是在此表中包含一个GUID激活码,并将该激活码包含在电子邮件中(作为链接中的查询字符串参数,或者在用户到达现场)。

当这个GUID发布后,你知道收到了电子邮件,你可以激活用户。

1

基本上我们不想在表中只添加一次的字段,因此我们将重用已经存在的字段。

我在几年前创建了一个激活系统,我在其中创建了一个“guid”键以放入密码字段(以节省数据库中的字段数量)。我通过连接一些随机数,日期和时间来创建密钥。一个普通的GUID键也应该这样做。

当您创建新帐户时,LastLogin字段将为空(NULL),因为用户尚未登录。我用这个来表示密码字段保存了密钥而不是密码。

发送的邮件有一个链接到确认页面,用户必须设置一个新的密码,因此覆盖“密钥”并登录(设置最后日期)。当然,用邮件链接中的密钥找到更新的正确帐户,并与密码字段中的密钥相匹配。

<a href="www.MyDomain.com/confirm.php?key=65351368571357316687341763">Confirm</a> 

香料它更我用CREATEDATE验证注册链接已经过期。如果用户在创建日期后48小时尝试使用该链接,则该帐户已过期。我本可以使用密钥中的日期&来检查这一点,但是然后用户可能会注入另一个日期&时间。

0

如果您想在不改变模式或设置特殊规则的同时仍保持安全的情况下使用此处定义的表,您可以考虑使用某种形式的加密来标识用户。

我会采取2或3个字段 - memberID,dateCreated,也许电子邮件和连接在一起,随机密钥和使用加密算法,如RSA或3DES加密整个字符串,并将其作为参数传递在您包含在激活电子邮件中的链接中。该链接应指向您的服务器端脚本,该脚本将验证通过有效的加密激活字符串的任何人。

脚本应解密传递的字符串,然后解析出memberID和密钥以及您包含的任何其他字段(例如dateCreated,eMail)并使用此数据来确定有效用户。然后,只需为您的用户设置isActive = 1。