- session中重要的函数:
session_write_close();
操作完某个session文件后,及时调用以上函数可以解除该session文件的锁。(session_start会锁住当前脚本需要访问的session文件,直到脚本结束自动解开或者直接手动调用session_write_close()等方法解开该session文件的锁。在session的文件锁被解开之前,其他程序访问不了该session所以会阻塞。其它的session文件如果没有被文件锁锁住,则不受影响)
- session GC
当用file存储session文件时,存放session的文件会越来越多,此时要想办法自动清理那些废弃的session文件,session GC做这件事情的。用一句话来描述是:每次在session初始化的时候(session_start),有session.gc_probability / session.gc_divisor的概率(以下设置为1 / 1000)的可能性启动gc进程来清除那些超过session.gc_maxlifetime(以下设置为1440)秒没有被访问过的session文件。
谨记:
; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method.
; For example, the following script is the equivalent of setting
; session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; find /path/to/sessions -cmin +24 -type f | xargs rm
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
- session 退出登录
session_start();
setcookie('PHPSESSID', '', -1);
session_unset();
session_destroy();
- php设置、获取session文件的存放目录
(1)设置php.ini
session.save_path
(2)调用函数 读取/设置当前会话的保存路径
session_save_path();
- cookie被禁用了,session还能用么?
(1)能用,php有两种方式用来传送会话 ID:Cookies 和 URL 参数,(如果同时传,则接收前者的值)后者没那么安全。
(2)cookie没有被禁用的时候,浏览器向服务器发送请求时,会自动带上cookie。SESSIONID放在cookie里面,所以服务器可以根据SESSIONID找到相应的session文件。
(3)cookie被禁用时,还可以通过get、post参数来向服务器提供SESSIONID。
(4)php支持通过URL 参数 来向服务器提供SESSIONID。但是要设置php.ini:
session.use_only_cookies = 0
session.use_trans_sid = 1
或者调用session_start时给出参数:
session_start(['use_only_cookies'=>0, "use_trans_sid"=>1]);
覆盖php.ini中的配置项。
tips: php可以用
setcookie('PHPSESSID', '', -1);
来模拟cookie被禁用的情况。
网友评论