- PHP教程
- PHP-主页
- PHP - 简介
- PHP-环境设置
- PHP - 语法概述
- PHP - 变量类型
- PHP - 常量
- PHP - 运算符类型
- PHP - 决策
- PHP - 循环类型
- PHP-数组
- PHP-字符串
- PHP - 网络概念
- PHP - 获取和发布
- PHP - 文件包含
- PHP - 文件和 I/O
- PHP - 函数
- PHP-Cookie
- PHP-会话
- PHP - 发送电子邮件
- PHP-文件上传
- PHP - 编码标准
- 高级PHP
- PHP - 预定义变量
- PHP-正则表达式
- PHP - 错误处理
- PHP - 错误调试
- PHP - 日期和时间
- PHP 和 MySQL
- PHP 和 AJAX
- PHP 和 XML
- PHP——面向对象
- PHP - 面向 C 开发人员
- PHP - 适合 PERL 开发人员
- PHP 表单示例
- PHP-表单介绍
- PHP - 验证示例
- PHP - 完整表格
- PHP框架作品
- PHP-框架工程
- PHP - 核心 PHP 与 Frame Works
- PHP 设计模式
- PHP - 设计模式
- PHP 函数参考
- PHP - 内置函数
- PHP 有用资源
- PHP - 问题与解答
- PHP - 有用的资源
- PHP - 讨论
PHP-会话
使数据可跨整个网站的各个页面访问的另一种方法是使用 PHP 会话。
会话在服务器上的临时目录中创建一个文件,其中存储注册的会话变量及其值。在该访问期间,该数据将可供网站上的所有页面使用。
临时文件的位置由php.ini文件中名为session.save_path的设置确定。在使用任何会话变量之前,请确保您已设置此路径。
当会话开始时,会发生以下事情 -
PHP 首先为该特定会话创建一个唯一标识符,该标识符是 32 个十六进制数字的随机字符串,例如 3c7foj34c3jj973hjkop2fc937e3443。
名为PHPSESSID的 cookie会自动发送到用户的计算机,以存储唯一的会话标识字符串。
将在服务器上指定的临时目录中自动创建一个文件,该文件的名称带有唯一标识符,前缀为 sess_,即 sess_3c7foj34c3jj973hjkop2fc937e3443。
当 PHP 脚本想要从会话变量中检索值时,PHP 会自动从 PHPSESSID cookie 中获取唯一的会话标识符字符串,然后在其临时目录中查找带有该名称的文件,并且可以通过比较这两个值来完成验证。
当用户丢失浏览器或离开站点后,会话结束,服务器将在预定时间段(通常为 30 分钟)后终止会话。
启动 PHP 会话
通过调用 session_start ()函数可以轻松启动 PHP 会话。该函数首先检查会话是否已启动,如果没有启动,则启动一个。建议将对session_start()的调用放在页面的开头。
会话变量存储在名为$_SESSION[]的关联数组中。可以在会话的生命周期内访问这些变量。
以下示例启动一个会话,然后注册一个名为counter的变量,该变量在会话期间每次访问页面时都会递增。
使用isset()函数检查会话变量是否已设置。
将此代码放入 test.php 文件中并多次加载该文件以查看结果 -
<?php session_start(); if( isset( $_SESSION['counter'] ) ) { $_SESSION['counter'] += 1; }else { $_SESSION['counter'] = 1; } $msg = "You have visited this page ". $_SESSION['counter']; $msg .= "in this session."; ?> <html> <head> <title>Setting up a PHP session</title> </head> <body> <?php echo ( $msg ); ?> </body> </html>
它将产生以下结果 -
You have visited this page 1in this session.
销毁 PHP 会话
PHP 会话可以通过session_destroy()函数销毁。该函数不需要任何参数,一次调用就可以销毁所有会话变量。如果您想销毁单个会话变量,则可以使用unset()函数来取消设置会话变量。
这是取消设置单个变量的示例 -
<?php unset($_SESSION['counter']); ?>
这是将销毁所有会话变量的调用 -
<?php session_destroy(); ?>
打开自动会话
如果您可以在php.ini文件中将session.auto_start变量设置为 1,则当用户访问您的站点时,您不需要调用 start_session() 函数来启动会话。
没有 cookie 的会话
可能存在用户不允许在其计算机上存储 cookie 的情况。所以还有另一种方法将会话ID发送到浏览器。
或者,您可以使用会话启动时定义的常量 SID。如果客户端未发送适当的会话 cookie,则其格式为 session_name=session_id。否则,它会扩展为空字符串。因此,您可以无条件地将其嵌入到 URL 中。
以下示例演示了如何注册变量,以及如何使用 SID 正确链接到另一个页面。
<?php session_start(); if (isset($_SESSION['counter'])) { $_SESSION['counter'] = 1; }else { $_SESSION['counter']++; } $msg = "You have visited this page ". $_SESSION['counter']; $msg .= "in this session."; echo ( $msg ); ?> <p> To continue click following link <br /> <a href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>"> </p>
它将产生以下结果 -
You have visited this page 1in this session. To continue click following link
打印 SID 时可以使用htmlspecialchars ()以防止 XSS 相关攻击。