cookies和session是web开发中比较重要的知识点,在编程中都是贯穿始终的。php
会话能够简单理解为,用户打开一个浏览器,点击多个超连接,访问服务器多个web资源,而后关闭浏览器,整个过程称之为一个会话。html
每一个用户在使用浏览器与服务器进行和会话的过程当中。都会产生一些数据。好比购物车,每一个用户查看购物车的时候,都能看到本身的选择,可是他们用的都是一套系统(简单的说都是访问的后台的相同php文件),那么如何才能让不一样的人看到本身的购物车里面的内容呢。前端
思路:保存在数据库里面, 这是一个不错的方案,它的优缺点咱们在后面再讨论。还有那么一些视频网站,能够保存你上次看过电影(在你尚未登录的时候),如何解决?linux
这里先讲解一些会话技术的相关基础知识。web
这两个东西是有千丝万缕的联系的,咱们先讲cookies而后讲session.sql
session与http协议有着莫大的关系,若是你以前了解http协议的话,你会有一个深刻的了解,若是没有基础也不要紧。数据库
好比https://www.baidu.com 前面为何要加https?是由于在网络传输中有着各类各样的协议,就像双方(发送方和接受方)达成约定。咱们开始吧。apache
你们在访问某个网站的时候,是否能看到提示你上次登录网站的时间,好比一些银行,邮箱,或者qq,都会提示你曾经在何时登录过。如何实现的? 还有在浏览好比淘宝京东的时候,提示你上次浏览的商品有哪些,不一样用户浏览过的商品确定不同,这是怎么实现的呢?编程
如何提示用户上次登陆网站的时间。如何保存上次用户浏览的信息,如何保证用户在必定时间内,不用反复登录。后端
在英文中是小甜饼的意思,它是一种客户端技术,服务器把每一个用户的数据以cookies的形式写给用户各自的浏览器。哈哈~平时是否是常常在浏览器中看见清除(cookies)之类的提示啊。当用户经过一个浏览器再去访问服务器中的web资源时,就会带着各自的数据区,这样!web处理的就是用户各自的数据了!
服务器在客户端保存用户的信息,这些信息就像是小甜饼同样,数据量并不大,服务器端在须要的时候能够从客户端读取,保存在客户端的浏览器缓存目录下,都很小!!通常在2~3k以内。经过set-cookie的HTTP协议获取。
保存上次登录时间信息等等,保存用户名,密码,在必定时间不用从新登录,记录用户访问网站的喜欢,好比google打开首页,自定义首页。
cookie 在客户机的某一个目录,根据你的浏览器,会有不一样的保存方式,保存的路径还与操做系统有关。
这里咱们以实验楼 linux系统 火狐浏览器为例子。(Windows下自行搜索)进入 firefox 的目录(须要先打开一次浏览器)。
cd ~/.mozilla/firefox #而后进入第二个文件夹(不一样环境可能有所区别)
能够看到里面有个 cookie.sqlite 文件,这个是一个数据库格式文件,可见Firefox 将 cookie 数据存入了数据库。 咱们能够开打火狐浏览器查看具体的 cookie 信息:
能够看见里面有各类站点显示的文件。其实就是键值对的字符串。
接下来咱们来写一个用 PHP 操做 cookie 的示例,能够在
php手册http://php.net/manual/zh/features.cookies.php中查看更多关于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时间戳。
代码说明:
把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).
上面的代码说明了 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);
更新
如何更新 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的有效时间来实现的。
在/var/www/html 目录下建立 cookie4.php ,编辑以下:
<?php //删除指定键名cookie setcookie("key","",time()-200); //删除全部,当所有删掉的时候,文件夹也会被删掉 foreach($_COOKIES as $key => $val) { setcookie($key, "", time()-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的变化。
本次实验主要向你们介绍与cookie相关的基础知识,并使用PHP对cookie进行写入,读取,更新和删除操做,同时还了解了cookie的有效期的概念,经过实际的项目实践PHP对cookie的操做。更多关于cookie的知识和用法请查阅PHP手册。
文章所有内容截选自实验楼教程【PHP会话控制】,该教程总共4节内容,文章属于第一节内容,主要讲的是PHP中的cookie 基础和应用;后面三节分别是:cookie 的实战应用、session基础与实战、session的实战应用,若是想要查看所有内容,点击【PHP会话控制】便可~