PHP使用Cookie实现基础访问授权与登录状态保持

凌晨两点半
凌晨两点半
发布时间:2026-10-14 | 6人浏览过
原创

本文介绍如何利用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开发安全的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表