我有自己的 Session 类,它处理会话动作。我想建立一种机制,即会话仅在需要时才启动 - 如果未设置会话变量,则系统不会创建它。
这就是代码(简化):
class Session
{
public function __construct()
{
}
protected function startSession($onlyIfExists = false)
{
if (session_id() == '')
{
if ($onlyIfExists && !isset($_COOKIE[session_name()]))
return;
@session_start();
}
}
public function setVar($id, $value)
{
$this->startSession();
$_SESSION[$id] = $value;
}
public function getVar($id)
{
$this->startSession(true); //starts session only if the session-id cookie exists (if the session was already started for this user)
if (isset($_SESSION) && array_key_exists($id, $_SESSION))
return $_SESSION[$id];
else return NULL;
}
}
然后我总是必须使用这个类对象来获取/设置会话变量,例如:
$session = new Session();
$session->getVar('test'); //does not start session at the first time
$session->setVar('test', 1); //starts session; after refreshing the page the above line does start session (cookie exists) and the value=1 is returned
这是一个很好的解决方案吗?您是否看到任何潜在的缺点和漏洞?或者也许它是每次开始会话的标准?
因为在我的应用程序中,任何会话变量都是在授权后创建的,所以 99.999% 的用户不需要会话。
先感谢您。