我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

与 的设置不同,必须先启动 。在 PHP 中,必须调用 ()。 () 函数的语法格式如下:

Bool session_start(void) //创建Session,开始一个会话,进行Session初始化

登录并复制

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

当你第一次访问某个网站时,()函数会创建一个唯一的ID,并自动通过HTTP响应头将该ID保存到客户端,同时在服务器上创建一个以该ID命名的文件,用于保存用户的会话信息。

当同一个用户再次访问网站时,HTTP 请求头中保存的 ID 会被自动结转。此时 () 函数不会分配新的 ID,而是在服务器硬盘上搜索与该 ID 同名的文件,读出之前为该用户保存的会话信息,并应用在当前脚本中,以达到跟踪用户的目的。以数组的形式使用,如:

$_SESSION['session名']

登录并复制

相关专题推荐:php(含图片、视频、案例)

注册会话变量并读取

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

代码如下

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

登录并复制

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

取消注册变量并销毁

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

bool session_destroy(void) //销毁和当前Session有关的所有资料

登录并复制

该函数不会释放当前相关的变量,也不会删除客户端存储的变量。

ID。因为$array和自定义数组在使用上是一样的,所以我们可以使用unset()函数来释放注册的单个变量。如下所示:

unset($_SESSION['键名']);

登录并复制

一定要注意不要使用 unset($) 删除整个 $ 数组,否则将无法再通过 $ 超全局数组注册变量。但是,如果要删除某个用户在 中注册的所有变量,可以直接给数组变量 $ 赋值一个空数组。如下所示:

$_SESSION=array()

登录并复制

默认的 PHP 基于,

ID 存储在客户端的 中,因此注销时也需要清除已保存的 ID,这必须使用 () 函数来完成。在 PHP 脚本中,您可以通过调用 () 函数来获取名称。

ID,代码如下:

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

登录并复制

从前面的介绍可以得出注销过程总共需要四个步骤,下面的例子中给出了完整的四个步骤的代码,运行脚本可以关闭并销毁本次会话相关的所有资源,代码如下:

代码如下

//第一步:开启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();
?>

登录并复制

配置选项

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

自动垃圾回收机制

你可以使用()函数在页面上提供一个“退出”按钮,点击该按钮即可销毁当前会话。但是,如果用户没有点击退出按钮,而是直接关闭浏览器,或者断开网络连接,服务器上保存的文件并不会被删除。虽然关闭浏览器时需要重新分配一个新的ID才能下次再次登录,但这只是因为php.ini中的设置 .=0 设置了ID在客户端的有效期,并以秒为单位指定了发送给浏览器的生命周期。

当系统指定了过期时间,无论浏览器是否打开,该ID都会自动消失。但是客户端ID消失时,服务器上保存的文件并不会被删除。因此,没有被该ID引用的服务器端文件就成了“垃圾”。

服务器保存的文件是普通的文本文件,因此会有一个文件修改时间。

“垃圾回收程序”启动后,会根据文件的修改时间删除所有过期文件。您可以通过设置 php.ini 中的 . 选项来指定一个时间(以秒为单位)。例如,如果您将选项值设置为 1440(24 分钟),那么“垃圾回收程序”将检查所有文件,并删除所有修改时间距当前系统时间大于 1440 秒的文件。

“垃圾回收程序”的启动机制是怎样的?

“垃圾回收程序”是在 () 函数被调用时启动的。如果一个网站有多个脚本,并且没有脚本,它们都使用 () 函数启动会话,同时会有很多用户访问,那么很有可能 1 秒钟内 () 函数会被调用 N 次,每次都启动“垃圾回收程序”是不合理的。可以修改 php.ini 文件中的两个选项“.和。”来设置启动垃圾回收程序的概率。概率会根据“./。”公共语句来计算。例如,选项 .=1,而选项 .=100,则概率为“1/100”,即调用 () 函数 100 次后,才会启动一次“垃圾回收程序”。

php.ini中相关配置

禁用时 URL 中传递的 ID

追踪一个用户是通过在页面间传递一个唯一的ID,通过ID提取用户在服务器上保存的变量来实现的。ID的传递方式有两种常见方式。

第一种方法是根据方法传递ID,这种方法比较好,但是并不总是可用,因为用户可以在客户端阻止;

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

在 的实现中,客户端保存的ID通常为1,当客户端禁用时,该ID将无法保存在 中,无法在页面间传递,变为无效。但Linux平台的PHP5可以自动检查该状态,如果客户端禁用,系统会自动将ID附加到URL上进行传递。当将系统作为Web服务器使用时,无法使用此功能。

PHP 中提出了另外一种跟踪机制,如果客户端浏览器不支持,PHP 可以重写客户端请求的 URL,并将 ID 添加到 URL 信息中。你可以手动给每个超链接的 URL 添加一个 ID,但工作量比较大,不建议使用这种方法。如下图所示:

代码如下

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

登录并复制

当使用 Linux 系统作为服务器时,如果在编辑 PHP 时使用了 --trans-sid 配置选项,并且激活了运行时选项 .,则在禁用客户端时,相对 URL 会被自动修改为包含会话 ID。如果没有配置,或者当使用系统作为服务器时,可以使用常量 SID。此常量是在启动会话时定义的。如果客户端没有发送合适的会话,SID 格式为 =,否则为空字符串。因此可以无条件地嵌入到 URL 中。下面的示例使用两个脚本来演示 ID 的传输方法。

session_start();
$_SESSION["username"]="admin";
echo "session ID:".session_id()."
";
?>

登录并复制

通过 URL 传递 ID

在脚本 test2.php 中输出脚本 test1.php 变量中保存的另一个用户名。在页面中再次输出 ID,对比两个脚本是否使用了相同的 ID。另外,在打开或关闭时,注意观察浏览器地址栏中 URL 的变化。代码如下:

代码如下

session_start();
echo $_SESSION["username"]."< br>";
echo "session ID:".session_id()."
";
?>

登录并复制

相关学习推荐:PHP编程从入门到精通

二维码
扫一扫在手机端查看

本文链接:https://by928.com/6391.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线