您的位置  > 互联网

在PHP中必须调用函数的语法格式

Bool (void) //创建、启动会话、并初始化

注意:()函数前不能有任何输出

当第一次访问网站时,()函数会创建一个唯一的ID,并自动将这个ID通过HTTP响应头保存到客户端。 同时,服务器端也会创建一个以ID命名的文件,用于保存用户的会话信息。 当同一用户再次访问该网站时,保存的ID会自动通过HTTP请求头带过来。 此时()函数不会分配新的ID,而是将其保存在服务器的硬盘上。 找到与该ID同名的文件,读出之前为该用户保存的会话信息,并将其应用到当前脚本中以跟踪该用户。 以数组的形式使用,如:$['name']

注册一个会话变量并读取

要在PHP中使用变量,除了启动之外,还需要经过注册过程。 注册和读取变量必须通过访问 $array 来完成。 $ 数组中的键名称与 PHP 中的普通变量具有相同的命名规则。 注册变量的代码如下:

<?php
//启动session的初始化
session_start();
//注册session变量,赋值为一个用户的名称
$_SESSION["username"]="skygao";
//注册session变量,赋值为一个用户的ID
$_SESSION["uid"]=1;
?>

执行脚本后,这两个变量将保存在服务器端的文件中。 该文件的位置是通过 php.ini 文件,在 .ini 指定的目录中。 属性。

注销变量并销毁

当你使用完一个变量后,你可以删除它,当你使用完一个会话时,你也可以销毁它。 如果用户退出Web系统,需要为其提供退出功能,其在服务器中的所有信息都将被销毁。 要销毁与当前会话相关的所有数据,可以调用()函数结束当前会话,并清除会话中的所有资源。 该函数的语法格式如下:

bool (void) //销毁所有与当前情况相关的数据

该函数不会释放当前变量,也不会删除客户端中存储的变量。 因为$array和自定义数组的用法是一样的,所以我们可以使用unset()函数来释放注册的单个变量。如下:

取消设置($['键名']);

注意不要使用 unset($) 删除整个 $array,这样你将无法再通过 $ 数组注册变量。 但如果要删除某个用户注册的所有变量,可以直接将数组变量$赋值给空数组。 如下:

$=数组()

默认情况下,PHP是基于服务器的,存储在客户端的服务器中。 因此,注销时也需要清除保存的文件,而这必须借助()函数来完成。 在PHP脚本中,可以通过调用()函数来获取名称。 删除客户端保存的数据,

代码如下所示:

<?php
//判断Cookie中是否存在session ID
if(isset($_COOKIE[session_name()])){
    //删除包含Session ID的cookie,注意第四个参数一定要和php.ini设置的路径相同
    setcookie(session_name(),'',time()-3600,'/');
}
?>

从前面的介绍可以看出,注销过程总共需要4步。 在以下示例中,提供了完整的四步代码。 运行该脚本将关闭并销毁与此会话相关的所有资源。 代码如下所示:

<?php
//第一步:开启Session并初始化
session_start();

//第二部:删除所有Session的变量,也可以用unset($_SESSION[XXX])逐个删除
$_SESSION = array();

//第三部:如果使用基于Cookie的session,使用setCookkie()删除包含Session ID的cookie
if(isset($_COOKIE[session_name()])) {
    setCookie(session_name(), "", time()-42000"/");
}

//第四部:最后彻底销毁session
session_destroy();

?>

配置选项

php.ini 文件和几个常用的配置选项:

。 = 0 ; 在请求启动时初始化

。 = 180 ; 将缓存中的会话文档设置为在 n 分钟后过期

。 = 0; 设置存储时间,单位为秒,相当于设置的过期时间。 当为0时,表示直到浏览器重新启动。

.=1,这样就不需要每次使用前都调用()了。 不推荐。 但是,启用此选项有一些限制。 如果 。 确实启用了,但不能将对象放入会话中,因为类定义必须在会话启动时启动。 在会话中重建对象之前加载。

session.cookie_path = / ; cookie的有效路径
session.cookie_domain = ; cookie的有效域
session.name = PHPSESSID; 用在cookie里的session的名字
session.save_handler = files ; 用于保存/取回数据的控制方式
session.save_path = /tmp ; 在 save_handler 设为文件时传给控制器的参数, 这是数据文件将保存的路径.
session.use_cookies = 1 ; 是否使用cookies

自动垃圾收集机制

您可以使用 () 函数在页面上提供一个“退出”按钮,单击该按钮即可销毁此会话。 但是,如果用户没有单击退出按钮,而是直接关闭浏览器,或者断开与互联网的连接,则保存在服务器上的文件将不会被删除。 虽然关闭浏览器,下次再次登录需要重新分配一个新的ID,但这只是因为php.ini中设置.=0来设置客户端中ID的有效期,单位是秒。 发送到浏览器的生命周期。 当系统指定一个有效期后,无论是否打开浏览器,该ID都会自动消失。 当客户端ID消失时,保存在服务器上的文件不会被删除。 因此,没有被ID引用的服务器端文件就变成了“垃圾”。

服务器保存的文件是普通的文本文件,因此会有文件修改时间。 “垃圾收集程序”启动后,所有过期的文件都会根据文件的修改时间被删除。 通过设置 指定时间(单位:秒)。 以php.ini中的选项为例,将选项值设置为1440(24分钟)。 “垃圾收集程序”将检查所有文件,如果修改时间距当前系统时间大于1440秒,则将其删除。

“垃圾收集程序”的启动机制是怎样的? 当()函数被调用时,“垃圾收集程序”就启动了。 一个网站有多个脚本。 如果没有脚本,就必须使用()函数打开会话,很多用户会同时访问。 ()函数很有可能在1秒内被调用N次,而如果每次都调用它就启动“垃圾收集程序”是非常不合理的。 可以通过修改“.”和“.”来设置启动垃圾收集程序的概率。 php.ini 文件中的选项。 将根据“./.”计算概率。 宣传。 例如,.=1,而.=100,则概率为“1/100”,即()函数被调用100次才可能启动“垃圾收集”程序”。

php.ini中相关配置

.=0; 当浏览器关闭时,相应的文件将被删除。

.; 设置过期时间,默认1440秒(24分钟)

./.; 启动垃圾收集机制的概率(建议值为1/1000-5000)

禁用时通过 URL 传递的 ID

跟踪用户是通过在页面之间传递唯一的ID,并通过ID提取用户在服务器中保存的变量。 常见的ID传输方式有两种:

第一种方法是基于传递ID,这是更优化的,但并不总是可用,因为用户可以在客户端阻止;

第二种方法是通过url参数传递,并将ID直接嵌入到URL中。

实现中通常采用该方法,客户端保存的ID为1。 当客户端被禁用时,该ID无法保存,也无法在页面之间传递,此时无效。 不过PHP5可以在Linux平台上自动检查状态。 如果客户端禁用它,系统会自动将 ID 附加到 URL 并传输。 使用系统作为Web服务器则没有此功能。

PHP 中提出了另一种跟踪机制。 如果客户端的浏览器不支持,PHP可以重写客户端请求的URL,并将ID添加到URL信息中。 您可以手动为每个超链接的URL添加ID,但工作量较大,不推荐这种方法。 如下:

<?php
//开启session
session_start();

//在每个URL后面附加上参数,变量名为session_name()获取名称,值通过session_id()获取
echo '.session_name().'='.session_id().'">连接演示';
?>

在使用Linux系统做服务器时,则在编辑PHP时如果使用了–enable-trans-sid配置选项,和运行时选项session.use_trans_sid都被激活,在客户端禁用Cookie时,相对URL将被自动修改为包含会话ID。如果没有这么配置,或者使用Windows系统作为服务器时,可以使用常量SID。该常量在会话启动时被定义,如果客户端没有发送适当的会话Cookie,则SID的格式为session_name=session_id,否则就为一个空字符串。因此可以无条件地将其嵌入到URL中去。在下例中使用两个脚本程序,演示了Session ID的传送方法。
<?php
session_start();

$_SESSION["username"]="admin";

echo "session ID:".session_id()."
"
;

?>

以上就是文章的全部内容。 想学习交流经验的可以加入PHP自学中心。 共同学习、交流、共同进步!

让学习成为一种习惯