设计php登录系统

来源:互联网 发布:淘宝代购服务点申请 编辑:程序博客网 时间:2024/04/29 15:34

首先,将登录系统分以下几块:

1. 用户名和密码的验证

2. 保存登录状态

3.退出登录,撤销登录状态


用户名和密码的验证,由于http协议是明文的,注意在提交数据之前,可用js等方法对用户名和密码进行加密。在服务端接受到数据之后,再进行处理验证,还有数据库中保存密码切不可直接存原有密码,经过加密处理再存进去,保证数据安全。


保存登录状态,简单的可以直接setcookie将用户名和密码做响应处理,存到浏览器,每次接受到请求时,判断cookie是否存在,若存在则表示已经登录。这种方法安全性低,若用户伪造cookie,则可以绕过登录判断。

第二种方法是通过session将用户登录状态保存在服务端,具体方法是,session_start(),$_SESSION['user_id'] = 1 这样就在服务端做了登录成功的标记,再设置setcookie(‘user_id','xxx',time()+3600),保存用户id到客户端,之后每次处理请求时都判断接收到的user_id在$_SESSION中是否存在,来判断用户的登录状态。

好处是用户伪造了cookie,但是服务端的$_SESSION中没有登录信息,用户无法通过验证。

(ps:用session时可能会遇到 _SESSION未定义的错误,这个要看看是否开启了session,因为默认是不开启,开启方法有俩个,在程序前面加上session_start();或者在php.ini找到session.auto_start = 0,改为1,则默认自动开启)

无论哪种方法,在每次接受到请求时,都要验证用户是否登录,刷新登录状态。


最后退出登录,撤销登录状态,只用cookie做验证,则直接setcookie(’name','value',time()-3600),或者setcookie(‘name',''),设置cookie过期或者为空。

如果用了SESSION做判断,则要unset($_SESSION['user_id']) 或者session_destroy(),setcookie('user_id','')


上面2种是比较常规的方法,如果在服务器做了集群的情况,就需要考虑SESSION的同步。

同步的方法有3种:

1. 将SESSION信息存到数据库里

a. 存到一台数据库服务器中,里面弄个session表,用来存用户的登录状态。在用户请求过来时,都到该数据库中判断一下状态。

b. 将session表和其他业务表放到一起,做分布式,每个数据库中都备份一份。

a方法,有独立数据库服务器做处理,压力小;b方法对数据库压力较大。

2. 将SESSION信息存到cookie中,客户端对服务端发送请求的时候,服务端首先判断session是否包含该用户的登录信息,没有则查看cookie是否包含。有包含则在服务端保存session状态,达到同步的效果。

3. 将SESSION信息保存到memcache等缓冲中,memcache可做分布式,session保存到缓存中,其他服务器也可同时访问,优点是速度快,但是数据不持久。

0 0
原创粉丝点击