早上看了一篇文章 无废话MVC入门教程九[实战一:用户注册与登陆] ,被 无废话、实战 这些强有力的字眼所吸引,拜读之。本文目标:一、独立开发用户注册与登陆!读完发现很欠妥当,于是评论了一下,被博主强烈反驳。本人才浅,也许言语很欠妥当罢,在此给那位博主道个歉。
注册和登录几乎是每个web必备的模块,通常面试的时候也会简单和面试者讨论下。
个人感觉做注册和登录需要考虑以下两点:
- 用户密码的存储,园子里面有很多相关的博客
- 登录状态的保持,cookies安全
用户密码的存储
很显然,现在没人会用明文存储了,这样会显得我们做程序的很二。园子里面有很多这方面的文章,可以搜索下。可以选择MD5加密,加上自己的盐值,或者使用用户注册的用户名做为盐,再或者自己变异一个MD5加密方式出来等等。
登录状态的保持,cookies安全
HTTP是无状态的,而服务端需要知道用户的登录状态,所以需要一个标识,来标识用户的登录状态。用户登录后,需要把用户的信息,比如UserId或者UserName写入cookies,作为用户已登录的标识。然而这样安全么?显然是不安全的,因为cookies可以伪造,UserId或者UserName在网站上很容易知道,自己伪造一个cookies,就可以是任意一个用户登录从而绕过用户密码。那么加密不就行了么,是的,加密以后别人看不到了,不知道加密方式的话也没办法伪造了。这样就安全了么?显然不是,如果把这个加密的字符串给复制到别的计算机,别的浏览器上,那么这个用户不也被登录了么。所以还需要一个key,来标识这个登录状态的唯一性,这个key可以是浏览器标识、ip地址加上其他一些参数加密而来。这样才是一个相对可靠的登录状态保存方式。
如果用户忘记了密码,怎么办,所以还需要提供一个密码重置的地方,密码重置又有很多方式,回答问题,手机,邮箱等
示例代码感觉没必要,知道思路代码很容易。