项目中常常用到登录,为了辨别用户以及保护资源。今天我们一起来学习如何使用PHP实现登录功能
总体组成
所有登录系统都分为3个部分:
登录验证(鉴权)
登录维持
登录退出
登录验证:只有符合某些验证条件的用户才能登录系统(例如:已注册用户)以及不同用户角色所能够使用的功能以及访问的资源不同(例如:管理员能够修改网站内容,普通用户只能查看;VIP可以查看的某些资源,普通用户不能查看等)
登陆维持:保持用户登录状态(例如,我登录之后访问A页面之后,访问B页面也是登录状态)
登录退出:在某些条件下或者用户进行某些操作时取消用户的登录状态(就是退出登录)
说明
本项目不讲述登录所需要的数据库IO部分,只分析核心逻辑。各位读者可以复制核心代码块,用在自己的项目上,并将xxx替换为相应的内容(例如数据库密码)。本教程基于PHP7.4、MySQL5.7、Apache。
核心概念与任务分析
Http是无状态协议,所以要在客户端保存数据,有两种方法:
Cookie
Session
Cookie是直接保存在用户本地的明文消息,字符个数、消息格式都受到限制
Session也是保存在用户的消息,只不过用户只存储索引,随着请求发送到服务器之后,服务器从数据库(一般是Redis,本教程使用PHP自带的Session,默认存放在系统的临时文件夹,可以在PHP.ini配置存储在别的路径)Session文件格式:
变量名
类型:长度:值;
代码实现
登录页面
?php$posts=$_POST;foreach($postsas$key=$value){$posts[$key]=trim($value);}$pass=md5($posts["pass"]);$user=$posts["user"];if(通过条件){session_start();$_SESSION["admin"]=true;}else{die("用户名密码错误");}?
需要保护(登录后查看)的资源
?php$admin=false;session_start();if(isset($_SESSION["admin"])$_SESSION["admin"]===true){?页面内容?php}else{//验证失败,将$_SESSION["admin"]置为false$_SESSION["admin"]=false;die("请先登录");}?Ryan