php session 机制 和 nginx+php负载均衡集群环境中的session共享方案梳理
一个会话是通过PHPsessid 来标示的,是通过md5远程请求服务器IP,时间,一些随机数得到的。通常安全起见用cookie传递(
session.use_cookies = 0 //设置客户端是否使用cookie来保存session值 该参数的值不影响上述机制的进行。(1为使用cookie作为sessid存放机制)
但是为了验证该机制,这里把该参数设为0,排除cookie携带seesionid的可能
session.use_only_cookies = 0 //是否只使用cookie来保存session值 该参数为1时,上述机制失效。(1为禁止cookie在url上携带)
);也可以用url传递(url?PHP_SESSID=<?=session id?>或者开启session.use_trans_sid = 1)(不推荐),在监控服务流量时,会在http_referer带出session id

session回收机制
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.
session.gc_probability = 1
session.gc_divisor = 100
; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440
从注释可以看出是session垃圾回收的配置。 session.gc_probability/session.gc_divisor 表述有1%的概率回收大于session.gc_maxlifetime时间的过期文件。
-----------------------------------------------------------------------------
我们看 http://cn.php.net/manual/zh/sessionha... php文档对 session.gc 的说明
Cleans up expired sessions. Called randomly by PHP internally when a sessio starts or when session_start() is invoked. The frequency this is called is based on the session.gc_divisor and session.gc_probability configuration directives.
This method wraps the internal PHP save handler defined in the session.save_handler ini setting that was set before this handler was set by session_set_save_handler().
If this class is extended by inheritiance, calling the parent gc method will invoke the wrapper for this method and therefor invoke the associated internal callback. This allows this method to be overidden and or intercepted and filtered.
For more information on what this method is expected to do, please refer to the documentation at SessionHandlerInterface::gc().
即:比如session_start()一次会话请求,会有1%的概率调用session的垃圾回收来以清理过期会话。
session 怎么存在文件中:
上面在php.ini文件里将session.save_handler修改为memcached,即表示将php的session信息存放到memcache里(前提是安装了memcached扩展),然后在session.save_path处配置连接memcache信息。
如: session.save_handler = memcached
session.save_path = "memcache1.huanqiu.com:11311,memcache1.huanqiu.com:11312,memcache2.huanqiu.com:11311,memcache2.huanqiu.com:11312"
转:https://cloud.tencent.com/developer/article/1026820 session共享

浙公网安备 33010602011771号