我想知道的主要问题是服务器如何知道会话何时结束。如果客户端不再存储会话ID(例如,在关闭浏览器之后),并且他们尝试向服务器请求另一个会话,则会启动新会话。服务器是否知道在一段时间后垃圾收集以前的会话数据?在我看来,这可能会被滥用......
答案 0 :(得分:2)
session.save_path
定义的目录中(例如/var/lib/php/sessions
),或者系统的临时目录(如果未设置)(通常为/tmp
)。会话在请求期间由PHP本身定期进行垃圾收集,或者通过cron作业进行垃圾收集(例如在Debian上这是默认设置)。见http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
我想知道的主要问题是服务器如何知道会话何时结束
他不知道。但是,他知道自某段时间以来某个会话何时未被使用,因此它可以删除未使用的会话。
服务器是否知道在一段时间后垃圾收集以前的会话数据?
是。这由session.gc_maxlifetime
ini设置定义。在垃圾收集期间,将删除任何早于此的会话。可以使用session.gc_probability
和session.gc_divisor
ini设置调整垃圾收集频率。 (见doc。)
在我看来,这似乎可以被滥用。
如果您的意思是某人可能能够在服务器上创建过多的staled会话;是的,这可能是真的。
答案 1 :(得分:0)
你所描述的是完全正确的。是的,它很容易被滥用。甚至还有一个工具可以自动劫持你周围的会话(搜索firesheep
)。会话通常存储为SESSION cookie或每次在服务器和客户端之间传递
检查PHP是否有一个非常简短的intro,一些谷歌会话和安全性将帮助你进一步。
答案 2 :(得分:-2)
会话自动过期并根据设置清除(例如,在没有使用20天之后)并且它们存储在linux上,通常在/ tmp /
下检查php.ini以获取更多信息