PHP Session
-
PHP Session
在整个网站的各个页面上访问数据的另一种方法是使用PHP Session。Session在服务器上的临时目录中创建一个文件,其中存储了已注册的会话变量及其值。在访问期间,此数据将可供网站上的所有页面使用。临时文件的位置由php.ini文件中的名为session.save_path设置确定。在使用任何会话变量之前,请确保此路径存在。开始会话后- PHP首先为该特定会话创建唯一标识符,该标识符是32个十六进制数字的随机字符串,例如202cb962ac59075b964b07152d234b70。
- 名为PHPSESSID的cookie 会自动发送到用户的计算机以存储唯一的会话标识字符串。
- 在指定的临时目录中的服务器上自动创建一个文件,并带有以sess_为前缀的唯一标识符的名称,例如sess_202cb962ac59075b964b07152d234b70。
-
启动PHP session
通过调用session_start()
函数可以轻松启动PHP session。该函数首先检查会话是否已经启动,如果没有启动,则启动会话。建议将session_start()
的调用放在页面的开头。session变量存储在名为$_SESSION[]的关联数组中。可以在会话的生命周期内访问这些变量。下面的示例启动一个session,然后注册一个名为counter的变量,每次在会话期间访问该页面时该变量都会递增。利用isset()
函数检查会话变量是否已设置。将此代码放在test.php文件中并多次加载(刷新)此文件以查看结果<?php session_start(); if( isset( $_SESSION['counter'] ) ) { $_SESSION['counter'] += 1; }else { $_SESSION['counter'] = 1; } $msg = "在这次会话中,您访问过此页面 ". $_SESSION['counter']. "次。"; ?> <html> <head> <title>设置一个PHP session</title> </head> <body> <?php echo ( $msg ); ?> </body> </html>
-
销毁PHP session
session_destroy()
函数可以销毁PHP session。此函数不需要任何参数,单个调用可以销毁所有会话变量。如果要销毁单个会话变量,则可以使用unset()函数取消设置会话变量。以下是取消设置单个变量的示例<?php unset($_SESSION['counter']); ?>
这是将销毁所有会话变量<?php session_destroy(); ?>
-
启用自动会话
如果您可以在php.ini
文件中将session.auto_start
变量设置为1,则无需调用start_session()
函数即可在用户访问您的站点时启动Session。 -
没有cookie的session
可能存在用户不允许在其计算机上存储cookie的情况。因此,还有另一种方法可以将会话ID发送到浏览器。或者,您可以使用session_id()
函数。如果客户端未发送适当的会话cookie,则其形式为session_name = session_id。否则,它会扩展为空字符串。因此,您可以无条件地将其嵌入到URL中。以下示例演示如何注册变量,以及如何使用session_id()
正确传递到另一个页面。<?php session_start(); if (isset($_SESSION['counter'])) { $_SESSION['counter'] = 1; }else { $_SESSION['counter']++; } $msg = "在这个会话中,您访问了页面 ". $_SESSION['counter']." 次。"; echo ( $msg ); ?> <p>要继续,请单击以下链接 <br /> <a href = "nextpage.php?sid=<?php echo htmlspecialchars(session_id()); ?>"> </p>
提示:session和cookie是应对HTTP不跟踪用户状态产生的,实际开发中,慎用session,大规模集群中,session有很大的问题,把session存到数据库是很好的做法