セッション アクションを処理する独自の 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% のユーザーにセッションは必要ありません。
前もって感謝します。