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

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

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

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

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

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

注册会话变量并读取

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

执行该脚本后,两个Session变量就会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下。

取消注册变量并销毁

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

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

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

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

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

$=数组()

PHP 默认是基于客户端的,该名称存储在客户端的 中,因此在注销时,还需要清除 ,这必须使用 () 函数来完成。在 PHP 脚本中,可以通过调用 () 函数来获取名称。要删除 ,代码如下:

 

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

配置选项

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

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

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

个人总结:

生成session和cookie:
    使用php的session_start() 会默认生成服务器端的session和客户端的cookie
客户端cookie删除方式:
    1、使用session_start()默认生成的cookie,设置session.cookie_lifetime=0; 关闭浏览器相应的cookie文件
    2、重新修改cookie有效时间:setCookie(session_name(), "", time()+3600, "/") 会在指定时间删   
    除,time()-秒数则立即清除
服务器端session删除方式:
    1、使用session_destroy() 销毁和当前Session有关的所有资料
    2、session.cache_expire = 180 ; 设置缓存中的会话文档在 n 分钟后过时
    3、session.gc_probability/session.gc_divisor; 启动垃圾回收机制(session_start()方法执行时
    的触发)概率(建议值为1/1000——5000)

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

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

项目经理在线

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

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

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线