使数据可跨整个网站的访问的另一种方法是使用PHP Session会话。
临时文件的位置由 php.ini 文件中名为 session.save_path 的设置确定。在使用任何会话变量之前,请确保已设置此路径。
当会话开始时,会发生以下情况-
PHP首先为该特定会话创建一个唯一标识符,该标识符是32个十六进制数字的随机字符串,例如3c7foj34c3jj973hjkop2fc937e3443。
名为 PHPSESSID 的cookie会自动发送到用户计算机,以存储唯一的会话标识字符串。
文件将在服务器上的指定临时目录中自动创建,并带有以sess_为前缀的唯一标识符的名称,如:sess_3c7foj34c3jj973hjkop2fc937e3443。
当PHP脚本想要从会话变量中检索值时,PHP会自动从PHPSESSID cookie中获取唯一的会话标识符字符串,然后在其临时目录中查找带有该名称的文件,并且可以通过比较这两个值来进行验证。
当用户关闭浏览器或离开网站后,会话结束,服务器将在预定时间段(通常为30分钟)后终止会话。
通过调用 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.
可以通过 session_destroy()函数销毁PHP会话。该函数不需要任何参数,一次调用即可销毁所有会话变量。如果要销毁单个会话变量,则可以使用 unset()函数取消设置会话变量。
这是取消设置单个变量的示例-
<?php unset($_SESSION['counter']); ?>
这是将销毁所有会话变量的调用-
<?php session_destroy(); ?>
如果您可以在 php.ini 文件中将 session.auto_start 变量设置为1,则无需在用户访问您的网站时调用start_session()函数即可启动会话。
在某些情况下,用户不允许在其计算机上存储cookie。因此,还有另一种将Session 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相关的攻击。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)