phpsessid是什么意思(PHP的Session运行机制)PHP教程 / PHP会话管理...

wufei123 发布于 2024-06-15 阅读(10)

Session是一种用户与网站会话方式,一旦开启了Session会话,便可以在网站的任何页面使用(保持)这个会话。会话流程

会话的工作流程很简单,当开始一个会话时,PHP 会尝试从请求中查找会话 ID (通常通过会话 cookie传递), 如果请求中不包含会话 ID 信息,PHP 就会创建一个新的会话 会话开始之后,PHP 就会将会话中的数据设置到$_SESSION变量中。

当 PHP 停止的时候,它会自动读取$_SESSION中的内容,并将其进行序列化, 然后发送给会话保存管理器来进行保存会话保持默认情况下,PHP 使用内置的文件会话保存管理器(files)来完成会话的保存。

也可以通过配置项 session.save_handler来修改所要采用的会话保存管理器 对于文件会话保存管理器,会将会话数据保存到配置项 session.save_path所指定的位置[Session] ; Handler used to store/retrieve data. ; http://php.net/session.save-handler session.save_handler = files ; The file storage module creates files using mode 600 by default. ; You can change that by using ; ; session.save_path = "N;MODE;/path" ; ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the processs umask. ; http://php.net/session.save-path ;session.save_path = "/tmp" ; Name of the session (used as cookie name). ; http://php.net/session.name session.name = PHPSESSID ; Initialize session on request startup. ; http://php.net/session.auto-start session.auto_start = 0 。

PHP脚本执行完毕之后,会话会自动关闭 同时,也可以通过调用函数session_write_close()来手动关闭会话Session操作创建session可以通过调用函数session_start()来手动开始一个会话,系统会分配一个会话 ID。

如果配置项session.auto_start设置为1, 那么请求开始的时候,会话会自动开始session_start(); $_SESSION["username"] = "gitlib"; session_start()是session机制的开始,它具有一定概率开启垃圾回收。

这个概率是根据php.ini的session.gc_probability配置项决定的,因为在有的系统中 session.gc_probability= 0,即概率是0,这时就不具备垃圾回收; Defines the probability that the garbage collection process is started ; on every session initialization. The probability is calculated by using ; gc_probability/gc_divisor. Where session.gc_probability is the numerator ; and gc_divisor is the denominator in the equation. Setting this value to 1 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance ; the gc will run on any given request. ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 ; http://php.net/session.gc-probability session.gc_probability = 1 session.gc_divisor = 1000 ; After this number of seconds, stored data will be seen as garbage and ; cleaned up by the garbage collection process. ; http://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440

概率是:session.gc_probability/session.gc_divisor, 结果 1/1000读取sessionPHP 内置的 $_SESSION 变量可以很方便的访问设置的 session 变量。

例子:session_start(); echo "用户名:".$_SESSION["username"]; 销毁session可以通过session_unregister()函数来注销单个session 变量或使用session_unset()来注销整个 session 会话。

例子:session_unset(); //注销 session 会话 也可以使用 unset() 函数来注销单个session 变量:

提示:不可使用 unset() 来销毁 session 会话自定义Session处理机制默认配置下,Session的持久化是通过文件来存储,我们也可以将Session信息保存到Key-Value数据或Mysql数据库中,可以通过session_set_save_handler()函数自定义session。

会话保存理器语法:# PHP5.4以前版本 session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool # PHP5.4以后版本 session_set_save_handler ( object $sessionhandler [, bool $register_shutdown = TRUE ] ) : bool 。

session_set_save_handler() 设置用户自定义会话存储函数,如果想使用 PHP 内置的会话存储机制之外的方式, 可以使用本函数,例如,可以自定义会话存储函数来将会话数据存储到数据库。

下面,以将会话保存的文件为例,说明一下这个函数的用法:在脚本执行完毕之后,PHP 内部会清除对象, 所以有可能不调用 write 和 close 回调函数 这样可能会引发非预期的行为,所以当使用对象作为会话保存管理器时, 需要通过注册 shutdown 回调函数来规避风险。

通常,你可以通过调用register_shutdown_function()函数 来注册 session_write_close 回调函数Session阻塞默认配置下,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁。

这样,同时多个请求就会引起阻塞可以使用session_write_close()把数据写入session文件并结束session进程,这样就不需要等待页面执行完成,但这样有个问题,就是执行完sesssion_write_close()后,对session的任何写操作都不起作用,因为session进程已经结束,如果需要再写session时,在前面加上session_start()。

当然也可以通过session_set_save_handler自定义session处理过程,这里不做补充。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻77945