开发者社区> 流楚丶格念> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Http Cookie介绍与应用

简介: Http Cookie介绍与应用
+关注继续查看

HTTP 会话


1. Cookie


HTTP 很重要的一个特点就是无状态(每一次见面都是“初次见面”),如果单纯的希望通过我们的服务端程序去记住每一个访问者是不可能的,所以必须借助一些手段或者说技巧让服务端记住客户端,这种手段就是 Cookie。


Cookie 就像是在超级市场买东西拿到的小票,由超市(Server)发给消费者(Browser),超市方面不用记住每一个消费者的脸,但是他们认识消费者手里的小票(Cookie),可以通过小票知道消费者之前的一些消费信息(在服务端产生的数据)。


image


Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。


1.1.Cookie属性


一般cookie所具有的属性,包括:


Domain:域,表示当前cookie所属于哪个域或子域下面。


对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名的。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其为值为默认的www.example.com。


Path:表示cookie的所属路径。


Expire time/Max-age:表示了cookie的有效期。expire的值,是一个时间,过了这个时间,该cookie就失效了。或者是用max-age指定当前cookie是在多长时间之后而失效。如果服务器返回的一个cookie,没有指定其expire time,那么表明此cookie有效期只是当前的session,即是session cookie,当前session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就应该被浏览器所删除了。


secure:表示该cookie只能用https传输。一般用于包含认证信息的- cookie,要求传输此cookie的时候,必须用https传输。


httponly:表示此cookie必须用于http或https传输。这意味着,浏览器脚本,比如javascript中,是不允许访问操作此cookie的。


比如百度的Cookie:


image


1.2. PHP 中操作 Cookie


http://php.net/manual/zh/function.setcookie.php


// 设置 cookie
 /* 1 小时过期  */ 
setcookie("TestCookie", "hello", time() + 1 * 60 * 60);
// 获取 cookie
echo $_COOKIE["TestCookie"];


1.2.1. 记住登录名案例


登录功能实现流程


image


1.2.2.PHP设置cookie


是给本网站域名的http设置cookie


setcookie('key', 'value',‘time’);


  • 只传递一个参数是删除


原理:设置过期时间为一个过去时间


  • 传递两个参数是设置 cookie


  • 传递第三个参数是设置过期时间


<?php

// 设置响应头中的 Set-Cookie 可以下发小票(给客户端发)
// Cookie 在客户端存储的是键值结构
// header('Set-Cookie: foo=bar');

// header 在设置相同的键时 会出现覆盖的情况
// header('Foo: 123');
// header('Foo: 456');

// setcookie 是专门用于设置 cookie 的函数
// setcookie('key', 'value');

// 只传递一个参数是删除
// 原理:设置过期时间为一个过去时间
setcookie('key');

// 传递两个参数是设置 cookie
setcookie('key1', 'value1');

// 传递第三个参数是设置过期时间
// 不传递就是 会话级别的 Cookie (关闭浏览器就自动删除)
setcookie('key2', 'value2', time() + 1 * 24 * 60 * 60);

setcookie('key3', 'value3', time() + 1 * 24 * 60 * 60, '/users');

setcookie('key4', 'value4', time() + 1 * 24 * 60 * 60, '', '', false, true);


1.2.3.PHP获取cookie


即上文创建的cookie


image


<?php

// 专门取 cookie
// 关联数组的方式访问客户端提交过来的 Cookie
var_dump($_COOKIE);


1.3. JavaScript 中操作 Cookie


1.3.1. Pure JavaScript


参考:http://www.runoob.com/js/js-cookies.html



// 新增一条 cookie,注意:cookie 是有大小限制,约为 4k
//  格式固定:<key>=<value>[; expires=<GMT格式时间>][; path=<作用路径>][; domain=<作用域名>] 
//  除了键值以外其余属性均有默认值,可以省略
//  expires 表示 cookie 失效的时间,默认为关闭浏览器时
//  path 表示 cookie 生效的路径,默认为当路径

//  /  /foo.php  /abc/foo.php

//  /foo    /bar/abc.php


//  domain 表示 cookie 生效的域名,默认为当前域名

document.cookie = 'name=value; expires=Tue, 10 Oct 2017 16:14:47 GMT; path=/; domain=zce.me'

// 获取全部 cookie
console.log(document.cookie)
// => 'key1=value1; key2=value2'
// 得到的结果是字符串,需要自己通过字符串操作解析


1.3.2. jQuery plugin


https://github.com/carhartl/jquery-cookie


1.3.3. without jQuery


https://github.com/js-cookie/js-cookie


2.Cookie案例:广告去除


image


点击不在显示,就会修改cookie值,使广告永远不显示


image


close.php


<?php

// 只要有人来请求我,意味着这个人不想再看到广告
// 我们给这个用户开张票
setcookie('hide_ad', '1');
header('Location: index.php');


index.php


<?php

if (isset($_GET['action']) && $_GET['action'] === 'close-ad') {
  // 不想看到广告
  setcookie('hide_ad', '1');
  $_COOKIE['hide_ad'] === '1';
}

?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    .ad {
      height: 200px;
      background-color: skyblue;
    }

    .ad a {
      float: right;
    }
  </style>
</head>
<body>
  <?php if (empty($_COOKIE['hide_ad']) || $_COOKIE['hide_ad'] !== '1'): ?>
  <div class="ad">
    <!-- <a href="close.php">不再显示</a> -->
    <a href="index.php?action=close-ad">不再显示</a>
  </div>
  <?php endif ?>
</body>
</html>


3.Cookie案例:猜数字游戏


文章地址:


https://yangyongli.blog.csdn.net/article/details/111564434

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
cookie处理
爬虫系列文章
68 0
cookie
原文:[转载]cookie cookie概述 在上一节,曾经利用一个不变的框架来存储购物栏数据,而商品显示页面是不断变化的, 尽管这样能达到一个模拟 全局变量的功能,但并不严谨。例如在导航框架页面内右击,单击快捷菜单中的【刷新】命令,则所有的JavaScript变量都会丢失。
826 0
HTTP 处理程序介绍
来源:MSDN HTTP 处理程序介绍 ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序的请求而运行的过程(通常称为“终结点”)。
725 0
HTTP 模块介绍
HTTP 模块介绍 HTTP 模块是一个在每次针对应用程序发出请求时调用的程序集。HTTP 模块作为 ASP.NET 请求管线的一部分调用,它们能够在整个请求过程中访问寿命周期事件。
910 0
+关注
流楚丶格念
csdn平台优质创作者,51cto TOP博主,360图书馆科技博主,燕山大学目前大三在读,日拱一卒,功不唐捐,加油!!!
1010
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载