PHP使用Cookie实现基础访问授权与登录状态保持
本文介绍如何利用PHP结合Cookie和Session实现基础的Web访问控制。核心逻辑包括:前端HTML表单收集用户凭据,后端通过mysql_connect连接数据库校验用户名和密码(示例中使用SHA1哈希比对),验证成功后设置Session标记权限并写入持久化Cookie以记住登录状态,同时在后续请求中读取Cookie进行身份鉴权,实现跨页面会话保持。
原理与架构
在传统的PHP应用中,利用Cookie和Session结合是一种常见的无状态向有状态过渡的技术方案。浏览器每次请求HTTP时会自动携带该域名下的Cookie信息。服务端通过检测Cookie的存在与否及内容有效性,判断当前用户是否已登录以及其权限等级。
核心代码实现步骤
第1步:构建登录表单界面
首先需要一个HTML表单供用户输入用户名和密码。为了方便用户体验,表单字段应预先填充当前Cookie中保存的用户名(如果存在)。
<form method="post" action="">
用户名<input type="text" name="name" value="<?php echo $_COOKIE['username']; ?>" />
<p />
密码<input type="password" name="password" />
<p />
<input type="submit" name="submit" value="登陆" />
</form>
第2步:处理表单提交与数据验证
当用户点击“登陆”按钮后,服务器接收POST请求。首先需要检查关键字段是否为空,防止无效请求直接侵入业务逻辑。
if(isset($_POST['name']) || isset($_POST['pass'])){
// 简单的非空验证
if(empty($_POST['name'])){ die("请输入用户名!"); }
if(empty($_POST['pass'])){ die("请输入密码!"); }
}
第3步:数据库连接与查询验证
使用旧的 mysql_* 函数集进行连接(注:实际生产环境建议使用PDO或MySQLi)。这里演示如何通过SQL语句匹配用户名和经过 SHA1() 加密后的密码哈希值。
$host = "localhost";
$user = "root";
$pass = "zq19890319";
$db = "cookie";
// 建立连接
$connection = mysql_connect($host, $user, $pass) or die("Unable to connect!");
mysql_select_db($db) or die("Unable to select database!");
// 构造安全查询语句
$query = "SELECT * FROM users WHERE name = '".$_POST['name']."' AND pass = SHA1('".$_POST['pass']."')";
$result = mysql_query($query) or die("Error in query:" . mysql_error());
第4步:设置会话状态(Session)与Cookie
若数据库返回恰好一行记录(mysql_num_rows == 1),说明凭证正确。此时执行两个关键动作:开启Session并在其中存储认证标记;同时通过 setcookie 设置一个长期有效的Cookie,用于下次自动登录。
if(mysql_num_rows($result) == 1){
session_start();
$_SESSION['auth'] = 1; // 标记已认证
// 设置Cookie,有效期为30天 (84600秒 * 30)
setcookie("username", $_POST['name'], time()+(84600*30));
echo "用户访问已经授权!";
}else{
echo "错误的用户名或密码!";
}
第5步:资源释放
验证结束后,必须释放结果集并关闭数据库连接,以减少服务器开销。
mysql_free_result($result);
mysql_close($connection);
注意事项
- 安全性警告: 上述示例使用了已过时的
mysql_connect函数,在PHP 7.0及以上版本中已被移除。建议在新项目中全面转向PDO或MySQLi扩展,并启用预处理语句以防止SQL注入。 - 密码存储:
SHA1哈希算法已不再被视为安全的密码存储方式。现代应用应当使用password_hash()和password_verify()配合bcrypt或argon2算法。 - Cookie安全: 敏感操作建议为Cookie设置
httponly标志位以防止XSS攻击窃取Cookie。
以上就是PHP使用Cookie控制访问授权的详细内容,更多关于PHP开发安全的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













