Http Cookie介绍与应用

简介: Http Cookie介绍与应用

HTTP 会话


1. Cookie


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


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



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:



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. 记住登录名案例


登录功能实现流程



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



<?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案例:广告去除



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



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

相关文章
|
8月前
|
网络协议 安全 API
WebSocket、Socket、TCP 和 HTTP 的差别与应用场景
WebSocket、Socket、TCP 和 HTTP 是网络通信中的四大“使者”,各具特色:HTTP 适合短时请求,TCP 稳定可靠,Socket 灵活定制,WebSocket 实现实时双向通信。本文用通俗语言解析它们的区别与应用场景,助你为项目选择最合适的通信方式。
2856 3
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
744 3
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
415 3
|
8月前
|
数据采集 Web App开发 iOS开发
解决Python爬虫访问HTTPS资源时Cookie超时问题
解决Python爬虫访问HTTPS资源时Cookie超时问题
|
8月前
|
Web App开发 缓存 数据安全/隐私保护
Django全栈实战:HTTP状态码与业务状态码的分层设计与实战应用
HTTP状态码是服务器响应请求的3位数字代码,分为1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。业务状态码则用于描述具体业务逻辑结果,常在响应体中返回。二者在前后端交互中有不同用途和处理方式。本文还介绍了如何在Django项目中设计并使用业务状态码。
636 0
|
12月前
|
API
已经设置好连接器工厂的HTTP连接器,不会在表单控件里取值应用
这是一个关于通过天眼查API获取企业数据的需求介绍。已实现HTTP连接器调用并成功返回数据,但问题在于如何设计表单:使用单行文本输入企业名称后,触发API查询,将返回的相关数据自动填充到指定的单行文本中,期待高手提供解决方案。
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
582 11
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
192 5
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。