{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
个人觉得,邮箱激活这种做法的意义,是为了验证邮箱的邮箱的有效性,其次防止机器人机械注册非法账号(不是真实存在的人)。
点击“下一步”,发送邮件。把用户提交的表单信息放到xml,等他激活了之后再添加到数据库,然后把xml的相关信息删掉。当然,最好的做法是在直接在数据库里面设置一个状态字段,我们只需要修改一下这两个值就可以了。个人觉得,两个的存储量是一样的,但是操作的话,xml还是麻烦一点,所以推荐使用数据设计状态这种做法。
之前有想过用cookie,用session来临时存储用户注册信息,但是cookie有浏览器的差异,换了个浏览器,换个信息就读取不到了,更何况换个电脑呢。session的生命周期很短,关闭浏览器就结束了。
在发送的邮件里,有激活的链接,比如:http://localhost:2556/website/register.aspx?re=yexjaeyeoxjijoyeeuqinyeaejaehjjhjes*wenjunli2
这个地址是经过加密的。“*”之前的时间(精确到毫秒),为什么要做这个时间呢,是为了设定在多少时间后失效,失效后把存储的数据删掉(激活失效这个功能)。“*”之后是用户名,其实也应该经过加密,上面没有加密。真正实现激活的是靠这个用户名,如果数据库中存在这个用户名,并且时间没有过期,则激活成功,把数据库用户状态修改。
其实更严谨一点的做法是对各个参数的值做一个md5加密,加密后的值(token)作为参数放到url里面去。用户点击过来的时候,再次验证md5加密,判断加密后的值是否与token值相等,不相等则用户修改过url参数。此目的是防止用户修改url参数对网站做攻击行为。(2017年后再次修改,其实下面的做法过于复杂,但是思路是可以的)
publicstaticstringgetstruserregist(){//自己做个格式,比如1对应”xxx1“datetimed1=datetime.now;list publicclassmyservice{//对称加密算法提供器privateicryptotransformencryptor;//加密器对象privateicryptotransformdecryptor;//解密器对象privateconstintbuffersize=1024;publicmyservice(stringalgorithmname,stringkey){symmetricalgorithmprovider=symmetricalgorithm.create(algorithmname);provider.key=encoding.utf8.getbytes(key);provider.iv=newbyte[]{0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};encryptor=provider.createencryptor();decryptor=provider.createdecryptor();}publicmyservice(stringkey):this("tripledes",key){}//加密算法privatestringencrypt(stringcleartext){//创建明文流byte[]clearbuffer=encoding.utf8.getbytes(cleartext);memorystreamclearstream=newmemorystream(clearbuffer);//创建空的密文流memorystreamencryptedstream=newmemorystream();cryptostreamcryptostream=newcryptostream(encryptedstream,encryptor,cryptostreammode.write);//将明文流写入到buffer中//将buffer中的数据写入到cryptostream中intbytesread=0;byte[]buffer=newbyte[buffersize];do{bytesread=clearstream.read(buffer,0,buffersize);cryptostream.write(buffer,0,bytesread);}while(bytesread>0);cryptostream.flushfinalblock();//获取加密后的文本buffer=encryptedstream.toarray();stringencryptedtext=convert.tobase64string(buffer);returnencryptedtext;}//解密算法privatestringdecrypt(stringencryptedtext){byte[]encryptedbuffer=convert.frombase64string(encryptedtext);streamencryptedstream=newmemorystream(encryptedbuffer);memorystreamclearstream=newmemorystream();cryptostreamcryptostream=newcryptostream(encryptedstream,decryptor,cryptostreammode.read);intbytesread=0;byte[]buffer=newbyte[buffersize];do{bytesread=cryptostream.read(buffer,0,buffersize);clearstream.write(buffer,0,bytesread);}while(bytesread>0);buffer=clearstream.getbuffer();stringcleartext=encoding.utf8.getstring(buffer,0,(int)clearstream.length);returncleartext;}/// 上面第一个是自己写的一个时间加密规则,第二个是.net的加密规则,其实也可以用md5,不过我不懂用,也没用过。 /// ";//邮件正文//mm.attachments.add(newattachment(@"c:d1.doc",system.net.mime.mediatypenames.application.rtf));//添加附件,第二个参数,表示附件的文件类型,可以不用指定//可以添加多个附件//mm.attachments.add(newattachment(@"d:b.doc"));smtp.send(mm);//发送邮件,如果不返回异常,则大功告成了。}catch(exception){returnfalse;}returntrue;}请在40分钟之内激活,逾期无效,抓紧时间哦~ 点击进入考无忧官方网站: