好的 - 对我来说,5 秒的会话听起来毫无意义(因为会话应该在无状态应用程序中维护应用程序状态......是的)。
您最好的选择是在会话中保存一个到期时间戳(time() + 5 秒),例如$_SESSION['expires'] - 然后每当您启动会话时,检查该变量是否存在,如果存在(并且是过去),终止会话并重新开始。
[编辑]
这是 可能 工作的另一种可能性,但您需要创建一个对象来管理您的会话 - 然后您可以拥有一个 kill() 方法,如果会话有已过期并且在 __destruct() 方法中 - 它不是完全证明的,因为只有在对象被销毁时才会调用析构函数 - 但它应该可以工作。
class Session {
private static $_instance;
//private constructor to prevent external instantiation
private function __construct($sSessName, $sSavePath, $iGCLifetime, $sCookieDomain, $sCookiePath) {
//session parameters
ini_set("session.save_path", $sSavePath);
ini_set("session.gc_maxlifetime", $iGCLifetime);
ini_set("session.use_trans_sid", false);
//session cookie parameters
ini_set("session.use_cookies", true);
ini_set("session.use_only_cookies", true);
ini_set("session.cookie_domain", $sCookieDomain);
ini_set("session.cookie_path", $sCookiePath);
ini_set("session.cookie_lifetime", 0);
//set the session name
session_name($sSessName);
//set the session cookie paramaters
session_set_cookie_params(0, $sCookiePath, $sCookieDomain);
//start the session
session_start();
//check to see if the session has expired - and if so kill it
if(isset($_SESSION['expires']) && time() > $_SESSION['expires']) {
$this->kill();
}
//if not - set the expiry time in the session
else {
$_SESSION['expires'] = time() + 5;
}
}
//destructor function _should_ kill the $_SESSION when the object is destroyed
public function __destruct() {
$this->kill();
}
//session killer
public function kill() {
//kill the session cookie
setcookie(session_name(), null, time()-3600);
//kill the session
session_unset();
session_destroy();
}
//Singleton instance getter
public function getInstance() {
if(!self::$_instance) self::$_instance = new self();
return self::$_instance;
}
}