本文由 ChatMoney团队出品
PHP中Session的声明与使用
在PHP中,Session的设置与管理与Cookie不同,必须首先启动。这通过调用session_start()
函数来完成。该函数的语法格式为:
bool session_start(void)
注意:在调用session_start()
之前不能有任何输出。
当用户第一次访问网站时,session_start()
会创建一个唯一的Session ID,并通过HTTP响应头将这个ID保存到客户端的Cookie中。同时,在服务器端也会创建一个以Session ID命名的文件,用于保存该用户的会话信息。
用户再次访问时,通过HTTP请求头携带Cookie中的Session ID。这时,session_start()
不会创建新的Session ID,而是在服务器上查找与Session ID同名的文件,并应用之前保存的会话信息。
Session通过数组形式使用,例如:$_SESSION['session名']
。
注册和读取Session变量
在PHP中使用Session变量,除了启动外,还需注册。注册和读取Session变量都通过$_SESSION
数组完成。例如:
<?php
session_start();
$_SESSION["username"]="skygao";
$_SESSION["uid"]=1;
?>
执行后,变量会被保存在服务器端的文件中。
注销变量与销毁Session
使用完Session变量后,可以删除。用户退出时,应销毁其所有信息。
- 使用
session_destroy()
函数可以销毁所有与当前Session相关的资料。 - 使用
unset()
函数可以释放单个Session变量。 - 清除客户端Cookie中的Session ID,需要使用
setCookie()
函数。
例如:
<?php
session_start();
$_SESSION = array();
if(isset($_COOKIE[session_name()])) {
setCookie(session_name(), "", time()-42000, "/");
}
session_destroy();
?>
php.ini中的Session配置选项
session.auto_start
:请求启动时初始化Session。session.cache_expire
:设置缓存中的会话文档过期时间。session.cookie_lifetime
:设置Cookie的保存时间,即Session的过期时间。session.cookie_path
:Cookie的有效路径。session.cookie_domain
:Cookie的有效域。session.name
:用于Cookie中的Session名称。session.save_handler
:用于保存/取回数据的控制方式。session.save_path
:数据文件保存的路径。session.use_cookies
:是否使用cookies。
Session的垃圾自动回收机制
当用户未正常退出而直接关闭浏览器时,服务器端的Session文件不会被删除。为了清理这些“垃圾”,PHP有一个自动回收机制。
session.gc_maxlifetime
:指定过期时间。session.gc_probability
和session.gc_divisor
:设置垃圾回收程序的概率。
例如,如果session.gc_probability=1
且session.gc_divisor=100
,则概率为“1/100”。
当Cookie禁用时通过URL传递Session ID
如果客户端禁用Cookie,PHP可以自动将Session ID添加到URL中。在Linux平台上,如果客户端禁用Cookie,系统会自动修改URL以包含Session ID。在Windows平台上,可以使用常量SID来实现相同功能。
例如:
<?php
session_start();
echo '<a href="demo.php?'.session_name().'='.session_id().'">连接演示</a>';
?>
关于我们
本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!