博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中的cookie 基础和应用
阅读量:7013 次
发布时间:2019-06-28

本文共 4655 字,大约阅读时间需要 15 分钟。

hot3.png

一、原理

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

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

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

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

二、基础知识

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

1 会话技术

  • cookies
  • session

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

session与http协议有着莫大的关系,如果你之前了解http协议的话,你会有一个深入的了解,如果没有基础也没关系。

比如 前面为什么要加https?是因为在网络传输中有着各种各样的协议,就像双方(发送方和接受方)达成约定。我们开始吧。

2 分析

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

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

3 cookie

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

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

4 cookie 的作用

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

三、实验步骤

1 cookies 在浏览器的保存

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

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

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

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

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

接下来我们来写一个用 PHP 操作 cookie 的示例,可以在 

中查看更多关于cookie的讲解和用法。

2 PHP 操作cookie

2.1 cookie的存取

1、开启Apache服务器

service apache2 start

2、进入Web根目录

cd /var/www/html

3、修改读写权限

sudo chmod -R 777 /var/www/html

4、新建cookie1.php,写入以下代码

5、浏览器测试

打开 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
";print_r($_COOKIE);echo "
";$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 ,编辑如下:

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

自己可以试试哦,打开浏览器,输入 localhost/cookie3.php,再次查看cookie信息,发现果然变化了。

删除

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

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

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

$val){ setcookie($key, "", time()-1);}?>

3 项目实战

需求:登录页面信息展示

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

具体分析:

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

3.1 显示上次登录时间

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

前端页面:login.php

    

Login In

User id
password

后端逻辑:loginProcess.php

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

Back to login";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的变化。

四、实验总结

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

五、最后

文章全部内容截选自实验楼教程,该教程总共4节内容,文章属于第一节内容,主要讲的是PHP中的cookie 基础和应用;后面三节分别是:cookie 的实战应用、session基础与实战、session的实战应用,如果想要查看全部内容,点击即可~

转载于:https://my.oschina.net/feanlau/blog/1557697

你可能感兴趣的文章
python2.x和python3.x的区别
查看>>
我的友情链接
查看>>
servlet下载文件名乱码问题
查看>>
redhat下完全卸载Oracle10g
查看>>
word-break和word-wrap
查看>>
H3C防火墙的dns-map功能
查看>>
iOS 9 点击右上角退回到上一App时 屏幕会闪一下
查看>>
我的友情链接
查看>>
POSIX线程
查看>>
支付宝-APP支付
查看>>
Qt小课的代码(第一周)
查看>>
数组与指针(一)
查看>>
I/O模型分类
查看>>
智能照明控制系统
查看>>
Shiro的Demo示例
查看>>
RISC领域ARM不是唯一
查看>>
数据库容灾的最高境界
查看>>
spark命令
查看>>
mysql explain中的select tables optimized away---(二)
查看>>
安装PHP5和PHP7
查看>>