PHP中的cookie 基础和应用

1、原理

cookies和session是web开发中比较重要的知识点,在编程中都是贯穿始终的。php

会话能够简单理解为,用户打开一个浏览器,点击多个超连接,访问服务器多个web资源,而后关闭浏览器,整个过程称之为一个会话html

每一个用户在使用浏览器与服务器进行和会话的过程当中。都会产生一些数据。好比购物车,每一个用户查看购物车的时候,都能看到本身的选择,可是他们用的都是一套系统(简单的说都是访问的后台的相同php文件),那么如何才能让不一样的人看到本身的购物车里面的内容呢。前端

思路:保存在数据库里面, 这是一个不错的方案,它的优缺点咱们在后面再讨论。还有那么一些视频网站,能够保存你上次看过电影(在你尚未登录的时候),如何解决?linux

2、基础知识

这里先讲解一些会话技术的相关基础知识。web

1 会话技术

  • cookies
  • session

这两个东西是有千丝万缕的联系的,咱们先讲cookies而后讲session.sql

session与http协议有着莫大的关系,若是你以前了解http协议的话,你会有一个深刻的了解,若是没有基础也不要紧。数据库

好比https://www.baidu.com 前面为何要加https?是由于在网络传输中有着各类各样的协议,就像双方(发送方和接受方)达成约定。咱们开始吧。apache

2 分析

你们在访问某个网站的时候,是否能看到提示你上次登录网站的时间,好比一些银行,邮箱,或者qq,都会提示你曾经在何时登录过。如何实现的? 还有在浏览好比淘宝京东的时候,提示你上次浏览的商品有哪些,不一样用户浏览过的商品确定不同,这是怎么实现的呢?编程

如何提示用户上次登陆网站的时间。如何保存上次用户浏览的信息,如何保证用户在必定时间内,不用反复登录。后端

3 cookie

在英文中是小甜饼的意思,它是一种客户端技术,服务器把每一个用户的数据以cookies的形式写给用户各自的浏览器。哈哈~平时是否是常常在浏览器中看见清除(cookies)之类的提示啊。当用户经过一个浏览器再去访问服务器中的web资源时,就会带着各自的数据区,这样!web处理的就是用户各自的数据了!

服务器在客户端保存用户的信息,这些信息就像是小甜饼同样,数据量并不大,服务器端在须要的时候能够从客户端读取,保存在客户端的浏览器缓存目录下,都很小!!通常在2~3k以内。经过set-cookie的HTTP协议获取。

4 cookie 的做用

保存上次登录时间信息等等,保存用户名,密码,在必定时间不用从新登录,记录用户访问网站的喜欢,好比google打开首页,自定义首页。

3、实验步骤

1 cookies 在浏览器的保存

cookie 在客户机的某一个目录,根据你的浏览器,会有不一样的保存方式,保存的路径还与操做系统有关。

这里咱们以实验楼 linux系统 火狐浏览器为例子。(Windows下自行搜索)进入 firefox 的目录(须要先打开一次浏览器)。

cd ~/.mozilla/firefox #而后进入第二个文件夹(不一样环境可能有所区别)

能够看到里面有个 cookie.sqlite 文件,这个是一个数据库格式文件,可见Firefox 将 cookie 数据存入了数据库。 咱们能够开打火狐浏览器查看具体的 cookie 信息:

能够看见里面有各类站点显示的文件。其实就是键值对的字符串。

接下来咱们来写一个用 PHP 操做 cookie 的示例,能够在 

php手册http://php.net/manual/zh/features.cookies.php中查看更多关于cookie的讲解和用法。

2 PHP 操做cookie

2.1 cookie的存取

一、开启Apache服务器

service apache2 start

二、进入Web根目录

cd /var/www/html

三、修改读写权限

sudo chmod -R 777 /var/www/html

四、新建cookie1.php,写入如下代码

<?php  
//演示如何建立cookies信息
//把用户名和密码保存在客户端的cookies
//这个函数用来保存cookie
//key--value的形式保存
setcookie("name","shiyanlou",time()+3600);
echo "success!";
?>

五、浏览器测试

打开 Firefox 浏览器,输入地址:localhost/cookie1.php。

输出 success!,说明咱们的cookie 信息已经被成功写入。按照上面的流程,查看此时浏览器中所有cookie信息,就会发现了多个一条记录:

由于咱们这里只有一个请求,因此还能够经过另一种方式查看cookie 信息:

这是它的一个初步使用.

注意保存多少时间是 time()+3600,time() 是当前的Unix时间戳。

代码说明:

  • 当浏览器访问cookie1.php页面的时候,咱们的服务器就会以Set-Cookie:name=xxx;expires=xxxx 回送http响应,当浏览器获取到该信息后,就会保存该cookie到新的xxx文件
  • 若是咱们没有时间参数 cookie不会保存到客户端,当浏览器的会话结束,咱们的cookie就会失效;
  • cookie保存的信息形式:键值对形式,客户端能够保存多个键值对;
  • cookie能够保存中文,可是会进行 urlencode 编码;
  • cookie能够有多个键值对(而session是统一的),还能够给不一样的键值对指定不一样的有效时间。

把cookie取出来 (超时以后就取不出来了)

新建 cookie2.php:

//cookie2.php
<?php
//获取cookie信息
echo "<pre>";
print_r($_COOKIE);
echo "<pre>";
$name=$_COOKIE['name'];
echo "name".$name;
?>

由于在 cookie1.php 中,咱们将cookie的有效时间设置为当前时间+3600s,即有效期为一小时。因此如今是可以取到的,为了方便测试,这里讲 cookie1.php 中cookie的有效期设置为5s。固然,若是你愿意等一个小时的话,也是能够的。修改以后,执行 cookie1.php,等待5s以后,再执行 cookie2.php:

cookie 能够分别设置各个键值对保存的时间,如:

setcookie('name','shiyahlou',time()+100)
setcookie('age',10,time()+200).

2.2 cookie过时

上面的代码说明了 cookie 过了有效期以后,就会失效,为何呢?其实这个跟http协议有关,它发包的时候没有带 cookie 了(由于超时过时了),http协议规定要携带网站cookie,全部web开发都遵循此规范。

这个机制是http协议规定的。

能够保存多个数据,使用明文方式!!因此若是用cookie来保存密码是很是危险的。

setcookie("name","passwd",time()+3600);
setcookies("name","shiyanlou1",time()+60); //这个值在一分钟后会过时setcookies("name","shiyanlou2",time()+3600);
setcookies("name","shiyanlou3",time()+3600);
setcookies("name","shiyanlou4",time()+3600);

2.3 cookie的更新与删除

更新

如何更新 cookie 信息?首先必须是是针对一个用户,setcookie 会覆盖以前的记录,在 /var/www/html 目录下建立文件 cookie3.php ,编辑以下:

<?php
setcookie("name","shiyanlou",time()+300);
echo "name is shiyanlou! <br>";
//更新
setcookie("name","chengdu",time()+300);
echo "update record, name is chengdu";;
?>

本身能够试试哦,打开浏览器,输入 localhost/cookie3.php,再次查看cookie信息,发现果真变化了。

删除

其实删除数据是经过修改cookie的有效时间来实现的。

  • 删除指定键值
  • 删除全部键值对 指定删除某一个
    • key<==>val
    • 说白了其实就是减小它存在的时间,让保存时间过时,时间减小多少均可以

在/var/www/html 目录下建立 cookie4.php ,编辑以下:

<?php
//删除指定键名cookie
setcookie("key","",time()-200);
//删除全部,当所有删掉的时候,文件夹也会被删掉
foreach($_COOKIES as $key => $val)
{
  setcookie($key, "", time()-1);
}
?>

3 项目实战

需求:登陆页面信息展现

  • 显示上次登陆的时间
  • 自动填写用户名和密码

具体分析:

  • 若是用户是第一次访问该页面,则提示“您是第一次访问”
  • 若是不是第一次访问,则显示上一次登录时间
  • 实现打开登录界面,自动填写用户名
  • 首先在前端界面添加一个复选框

3.1 显示上次登陆时间

实现这个功能须要一个前端界面,一个后端数据处理。

前端页面:login.php

<html>
<head></head>
<body>
    <h1>Login In</h1>
    <form action="loginProcess.php" method="post">
        <table>
            <tr>
                <td>User id</td>
                <td><input type="text" name="id"/></td>
            </tr>
            <tr>
                <td>password</td>
                <td><input type="passwd" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="login"/></td>
                <td><input type="reset" value="reset"/></td>
            </tr>
        </table>
    </form>
</body>
</html>

后端逻辑:loginProcess.php

这段代码的做用就是检验 cookie 是否为空,为空则说明是第一次登录,不为空则说明不是第一次登录,就把上次登录的时间打印出来。而后这一段代码能够封装成为一个函数,用的时候再require一次。

<?php
echo "welcome,  ".$_POST['id'].", login success!!";
echo "<br/><a href='login.php'>Back to login</a>";
if(!empty($_COOKIE['lastVist'])){
    echo "your last login time:".$_COOKIE['lastVist'];
    //更新时间
    setcookie("lastVist",date("Y-m-d H:i:s"),time()+24*3600*30); 
}else{
    //用户第一次登录
    echo "you first login time:";
    setcookie("lastVist",date("Y-m-d H:i:s"),time()+24*3600*30);
}
?>

打开浏览器,输入地址:localhost/login.php。输入登陆信息,就能够看到效果了。测试过程当中,别忘了看看浏览器中cookie的变化。

4、实验总结

本次实验主要向你们介绍与cookie相关的基础知识,并使用PHP对cookie进行写入,读取,更新和删除操做,同时还了解了cookie的有效期的概念,经过实际的项目实践PHP对cookie的操做。更多关于cookie的知识和用法请查阅PHP手册。

5、最后

文章所有内容截选自实验楼教程【PHP会话控制】,该教程总共4节内容,文章属于第一节内容,主要讲的是PHP中的cookie 基础和应用;后面三节分别是:cookie 的实战应用、session基础与实战、session的实战应用,若是想要查看所有内容,点击【PHP会话控制】便可~

相关文章
相关标签/搜索