PHP 会话控制(1)之cookie

1.什么是cookie:

有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

优点:

  • 兼容性好

缺点:

  • 1.增加了网络流量;
  • 2.则是它的数据容量有限,最多只能存储4KB的数据,浏览器之间各有不同;客户端可以禁用或清空Cookie,从而影响程序的功能。
  • 3.是不安全。当多人共用一台计算机时使用Cookie可能会泄露用户隐私, 带来安全问题。

2.cookie工作原理:

Cookie的工作原理


语法:

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。 和其他 HTTP 头一样,必须在脚本产生任意输出之前发送Cookie(由于协议的限制)。 请在产生任何输出之前(包括 <html><head> 或者空格)调用本函数。一旦设置 cookie后,下次打开页面时可以使用$_COOKIE读取。 Cookie 值同样也存在于 $_REQUEST

  1. name: Cookie 名称。
  2. value:Cookie 值。 这个值储存于用户的电脑里,请勿储存敏感信息。 比如 name 是 ‘cookiename’, 可通过 $_COOKIE[‘cookiename’] 获取它的值。
  3. expire:Cookie 的过期时间。 这是个 Unix 时间戳,即 Unix 纪元以来(格林威治时间 1970 年 1 月 1 日 00:00:00)的秒数。 也就是说,基本可以用 time() 函数的结果加上希望过期的秒数。 或者也可以用 mktime()。 time()+60*60*24*30 就是设置 Cookie 30 天后过期。 如果设置成零,或者忽略参数, Cookie 会在会话结束时过期(也就是关掉浏览器时)。
  4. path:Cookie 有效的服务器路径。 设置成 ‘/’ 时,Cookie 对整个域名 domain 有效。 如果设置成 ‘/foo/’, Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。 默认值是设置 Cookie 时的当前目录。

  5. domain:Cookie 的有效域名/子域名。 设置成子域名(例如 ‘www.example.com’),会使 Cookie 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。 要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是 ‘example.com’)。

  6. secure:设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。 设置成 TRUE 时,只有安全连接存在时才会设置 Cookie。 如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie (通过 $_SERVER[“HTTPS”] 判断)。

  7. httponly:设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。 这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。FALSE,则没有限制。

返回值

如果在调用本函数以前就产生了输出,setcookie() 会调用失败并返回 FALSE。 如果 setcookie() 成功运行,返回 TRUE。当然,它的意思并非用户是否已接受 Cookie。

设置和读取cookie

<?php
    $value="my cookie value"; //发送一个简单的cookie
    setcookie("testcookie",$value,time()+60);  //set cookie


?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Testcookie</title>

</head>
<body>
    <?php 
        if(isset($_COOKIE["testcookie"])) //判断是否存在
            echo($_COOKIE["testcookie"]."<br>");
        print_r($_COOKIE);
    ?>
</body>
</html>

这里写图片描述


删除cookie

要删除一个 Cookie,应该设置过期时间为过去,以触发浏览器的删除机制。

<?php
// 设置过期时间为一个小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
?>

用于记录当前用户访问网站的次数:

<?php

    if(isset($_COOKIE["num"]))
        $num=$_COOKIE["num"];
    else
        $num=0;                        //首次设置cookie

        $num=$num+1;                 
    setcookie("num",$num,time()+60*60) //发送一个cookie num记录访问次数

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Testcookie</title>

</head>
<body>
    <?php 
        if($num>1)
            echo("您已经第".$num."次访问本站点了。");
        else
            echo("欢迎首次访问本站");
        //关闭网页后,变量$num将被释放,但因为它的值已经保存再cookie中,所以下次打开网页会连续计数
    ?>

</body>
</html>

这里写图片描述

用户验证身份是验证cookie:

<?php  //身份验证cookie
    header("content-type:text/html;charset=utf-8");
    error_reporting(0);

    //取输入的用户名和密码
        $uid=$_POST['username'];
        $upwd=$_POST['pwd'];



    //验证用户名和密码
    if($uid=="admin" && $upwd=="pass")
    {
        echo("您已经登入成功,欢迎光临");
        if($_POST['checkboxCookie']=="on")
        {
            setcookie("username",$uid,time()+60*60*24);
            setcookie("pwd",$upwd,time()+60*60*24);
        }
    }   
    else
        echo("登入失败,请返回重新登录");

?>


<?php
    error_reporting(0);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Testcookie</title>
    <style type="text/css">
form {
    margin-top: 300px;
    padding-left: 40%;
}
input[type="password"]{
    margin-left: 16px;
}
input[type="reset"],input[type="submit"]{
    margin-left: 80px;


}

</style>
</head>
<body>

    <form action="1.php" method="POST">

    <label>用户名:
        <input type="text" name="uesrname" value=" <?php echo($_COOKIE["username"]);?>">
    </label>
    <br><br>
                                                        <!-- 保留上次成功登入的用户名-->
    <lable>密码:
    <input type="password" name="pwd" value="<?php echo($_COOKIE["password"]);?>" >
    </lable>
                                                        <!-- 保留上次成功登入的用户名 -->
    <input type="checkbox" checked name="checkboxCookie">保留用户信息<br><br> <!-- 复选框 -->
    <input type="submit" name="put_info" value="登录">
    <input type="reset" name="rest_info" value="重置">
    </form>




</body>
</html>

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值