当前位置: 首页 > news >正文

PHP语法高级篇(三):Cookie与会话

Cookie与会话在 Web 编程中十分实用:Cookie 能实现一周免登录,还能记住用户的主题偏好;会话可保存当前用户信息,也能临时存储购物车数据。本篇文章将记录Cookie与会话的学习过程。


一、Cookie

cookie 常用于识别用户。cookie 是服务器在用户的计算机上嵌入的一个小文件。每当同一台计算机使用浏览器请求页面时,它也会发送该 cookie。

1、创建/检索 cookie

setcookie() 函数用于创建 cookie。

setcookie(string $name,string $value = "",int $expires_or_options = 0,string $path = "",string $domain = "",bool $secure = false,bool $httponly = false
): bool

setcookie() 定义了 Cookie,会和剩下的消息头一起发送给客户端。必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。请在产生任何输出之前(包括<html>和<head>或者空格)调用本函数。

一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。

参数

name

必需。Cookie 名称。

value

可选。Cookie 值。这个值储存于用户的电脑里,不要储存敏感信息。比如 name 是 'cookiename',可通过 $_COOKIE['cookiename'] 获取它的值。

expires_or_options

可选。Cookie 的过期时间。这是 Unix 时间戳,即纪元以来的秒数。一种设置此值的方式是将 cookie 过期前的秒数与调用 time() 的结果相加。例如,time()+60*60*24*30 就是设置 Cookie 30 天后过期。还有一种选择就是使用 mktime() 函数。如果设置为 0 或者忽略,Cookie 会在会话结束时过期(关掉浏览器时)。

path

可选。Cookie 有效的服务器路径。设置成 '/' 时,Cookie 对整个域名 domain 有效。如果设置成 '/foo/',Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。默认值是设置 Cookie 时的当前目录。

domain

可选。Cookie 的有效域名/子域名。设置成子域名(例如 'www.example.com'),会使 Cookie 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个示例里是 'example.com')。

secure

可选。设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。设置成 true 时,只有安全连接存在时才会设置 Cookie。如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie(通过 $_SERVER["HTTPS"] 判断)。

httponly

可选。设置成 true,Cookie 仅可通过 HTTP 协议访问。这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持)。

返回值 

如果 setcookie() 成功运行,返回 true。

通过 $_COOKIE 可以获取 cookie 中设置的内容。

$_COOKIE['cookie名称'] 

示例

<?php
$cookie_name = "user";
$cookie_value = "张三";
setcookie($cookie_name, $cookie_value, time() + 3600); // 1小时过期
?>
<html><body><?phpecho "<h1>欢迎您:" .  $_COOKIE[$cookie_name] . "</h1>";?></body>
</html>

注意setcookie() 函数必须出现在 <html> 标签之前。

2、修改 cookie 值 

要修改 Cookie,只需再次使用 setcookie() 函数设置 cookie 即可:

<?php
$cookie_name = "user";
$cookie_value = "李四"; // 将 "张三" 更改为了 "李四"
setcookie($cookie_name, $cookie_value, time() + 3600); // 1小时过期
?>
<html><body><?phpecho "<h1>欢迎您:" .  $_COOKIE[$cookie_name] . "</h1>";?></body>
</html>

3、删除 cookie

要删除一个 Cookie,应该设置过期时间为过去,以触发浏览器的删除机制。

<?php
// 设置过期时间为一小时前
setcookie("user", "", time() - 3600);
?>

二、会话

会话(session)是一种(在变量中)存储信息以供跨多个页面使用的方法。与 cookie 不同,这些信息不会存储在用户的计算机上。默认情况下,会话变量在用户关闭浏览器之前一直存在。换句话说,浏览器关闭后,会话变量将被销毁。

1、开始 PHP 会话

会话通过 session_start() 函数开始。

session_start(array $options = []): bool

session_start() 会创建新会话或者重用现有会话。如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID,则会重用现有会话。

参数

options

此参数是一个关联数组,如果提供,那么会用其中的项目覆盖 会话配置指示 中的配置项。此数组中的键无需包含 session. 前缀。

 返回值

成功开始会话返回 true ,反之返回 false

会话变量通过 PHP 全局变量:$_SESSION 设置。

现在,创建一个名为 "demo_session1.php" 的新页面。在该页面中,启动一个新的 PHP 会话并设置一些会话变量:

<?php
// 开始会话
session_start();
// 设置会话变量
$_SESSION["username"] = "张三";
$_SESSION["age"] = "18";

注意:session_start() 函数必须是您文档中的第一个内容。在任何 HTML 标签之前。

2、获取 PHP 会话变量值 

通过 $_SESSION 可以获取 session 中设置的内容。

$_SESSION['session名称'] 

现在,我们来创建另一个名为 "demo_session2.php" 的页面。从该页面,我们将访问在第一页("demo_session1.php")上设置的会话信息。

需要注意的是,会话变量不是单独传递给每个新页面的,而是从我们在每个页面开始时打开的会话(session_start())中检索的。

<?php
// 开始会话
session_start();
?>
<html><body><?php// 输出上一页面设置的会话变量echo "姓名: " . $_SESSION["username"] . "<br>";echo "年龄: " . $_SESSION["age"];?></body>
</html>

3、修改 PHP 会话变量

要更改会话变量,只需重写它:

<?php
// 开始会话
session_start();
// 要更改会话变量,只需重写它
$_SESSION["username"] = "李四";
$_SESSION["age"] = "25";

4、销毁 PHP 会话

要删除所有全局会话变量并销毁会话,需使用 session_unset() 和 session_destroy()

session_unset:释放所有的会话变量。

session_unset(): bool

session_unset() 会释放当前会话注册的所有会话变量。

返回值

成功时返回 true, 或者在失败时返回 false。

session_destroy:销毁一个会话中的全部数据。

session_destroy(): bool

返回值

成功时返回 true, 或者在失败时返回 false。

示例

<?php
// 开始会话
session_start();
?>
<html><body><?php// 释放所有会话变量session_unset();// 销毁会话session_destroy();?></body>
</html>

文章转载自:
http://airing.hdqtgc.cn
http://campsite.hdqtgc.cn
http://argy.hdqtgc.cn
http://chilachap.hdqtgc.cn
http://behaviour.hdqtgc.cn
http://beneficiation.hdqtgc.cn
http://cattlelifter.hdqtgc.cn
http://brize.hdqtgc.cn
http://baedeker.hdqtgc.cn
http://attunement.hdqtgc.cn
http://centaurae.hdqtgc.cn
http://arthrodia.hdqtgc.cn
http://cholerine.hdqtgc.cn
http://chevalet.hdqtgc.cn
http://arc.hdqtgc.cn
http://ballast.hdqtgc.cn
http://cantle.hdqtgc.cn
http://cardioscope.hdqtgc.cn
http://bowline.hdqtgc.cn
http://aerosinusitis.hdqtgc.cn
http://brokage.hdqtgc.cn
http://ben.hdqtgc.cn
http://calcaneus.hdqtgc.cn
http://biographically.hdqtgc.cn
http://autofining.hdqtgc.cn
http://cambodian.hdqtgc.cn
http://cartulary.hdqtgc.cn
http://chiapas.hdqtgc.cn
http://assertedly.hdqtgc.cn
http://benactyzine.hdqtgc.cn
http://www.dtcms.com/a/281301.html

相关文章:

  • Redis中的红锁
  • ADC采集、缓存
  • Axios 完整功能介绍和完整示例演示
  • 映美打印机-URL页面打印
  • Spring MVC 执行流程详解:一次请求经历了什么?
  • 微信小程序:在ios中border边框显示不全
  • XCTF-repeater三链破盾:PIE泄露+ROP桥接+Shellcode执行的艺术
  • PyTorch 数据加载实战:从 CSV 到图像的全流程解析
  • 股指期货主连和次主连的区别是什么?
  • 游戏加速器核心技术:动态超发
  • Linux 文件系统实现层详解:原理、结构与驱动衔接
  • 人类气道黏膜下腺类器官:解析呼吸炎症与感染的新平台
  • Sharding-JDBC 分布式事务实战指南:XA/Seata 方案解析(三)
  • (3)从零开发 Chrome 插件:网页图片的批量下载
  • Google EMM是什么?
  • Git Idea 冲突解决
  • GitHub Pages无法访问以点号.开头的目录
  • 【实时Linux实战系列】实时数据流的网络传输
  • 百度移动开发面经合集
  • 【matlab】三维路面谱生成代码
  • Altium Designer 25 安装与配置完整教程
  • 【高并发服务器】多路复用的总结 eventfd timerfd
  • 2.3 数组与字符串
  • Flutter 股票图实现分析与解决方案
  • 深入理解高性能字节池 bytebufferpool
  • 1.easypan-登录注册
  • AbMole小课堂 | Angiotensin II(血管紧张素Ⅱ)在心血管研究中的多元应用
  • 基于51单片机和16X16点阵屏、矩阵按键的小游戏《俄罗斯方块》
  • 清理C盘--办法
  • python的形成性考核管理系统