PHP下对Cookie的相关操作

什么是Cookie?

Cookie相当于一个身份证,上面有一些信息,这些信息供浏览器识别来确认身份以减少用户的操作,增加便捷性。比如管理员就不需要多次输入账号密码就能登录到后台。从而衍生出cookie注入的相关攻击手段。

  • Cookie是存在于客户端的文本/文件。
  • 客户端每次访问网站都会携带cookie

Cookie性质:

在这里插入图片描述

  • name:Cookie名称
  • value:Cookie值
  • Domain:Cookie适用的地址
  • Path:Cookie存在路径
  • Expires:租约
  • 大小:Cookie大小
  • httponly:仅仅通过http访问,不能通过js
  • secure:https
  • samesite:用于限制第三方cookie,增加安全性
  • 最后访问:最后访问时间

开始和取消Cookie

在PHP中:

  • 使用 setcookie() 函数用于设置 cookie。但是setcookie() 函数必须位于 <html> 标签之前。,语法:setcookie(name, value, expire, path, domain);
  • 使用 setcookie(‘name’,value,time()-xxxx) 以租约到期的方式来取消cookie。

取用Cookie的值:

  • 使用$_COOKIE 变量用于取回 cookie 的值。
    比如我要取回name的值,就是 : $_COOKIE[‘name’]

  • isset() 确认是否有Cookie:isset($_COOKIE["name"])

实例代码:

设置一个登录系统,并带有Cookie:

主页:
在这里插入图片描述

<meta charset="utf-8">
<h1>Login</h1>
<?php
if (isset($_COOKIE['name'])) {
    echo "欢迎您,{$_COOKIE['name']},<a href=logout.php>注销</a>";
} else {
    echo "<a href='login.php'>请登录</a>";
}
?>

这个代码的意思是,从Cookie中读取规定死的账号,如果不是那个账号,则要求重新登录。如果是那个账号,可以选择注销。

先看注销代码,即取消租约:

<?php
setcookie("name",$_COOKIE['name'],time()-3600);
?>

登录代码:

<meta charset="utf-8">
<?php
if (isset($_POST['usersubmit'])) {
    if (
        isset($_POST['username']) && $_POST['username'] == "s" && isset($_POST['userpass']) && $_POST["userpass"] == "1"
    ) {
        if (setcookie("name", "s")) {
            echo "登录成功,<a href='index.php'>返回首页</a>";
        } else {
            echo "Cookie错误";
        }
    } else {
        echo "用户名和密码错误 ,<a href='login.php'>重新登录</a>";
    }
} else {
    $htm = <<<HTML
<form action="" method="post">
    用户名: <input type="text" name="username"></br>
    密码: <input type="password" name="userpass"></br>
    <input type="submit" name="usersubmit" value="登录"> 
</form>
HTML;
    echo $htm;
}
?>

这个代码的意思是:

  • 在登录界面使用POST传参,
    • 如果点击了提交按钮,就开始确认用户名和密码是否匹配,
      • 如果匹配;
        • 如果成功注入Cookie,则成功
        • 如果没能成功注入Cookie,则表示失败
      • 如果不匹配,则和规定的Cookie不一致,返回报错

在这里插入图片描述

posted @ 2021-08-10 10:44  Zeker62  阅读(120)  评论(0编辑  收藏  举报