マイケルの言うことは正しい。完全に防ぐことはできません。間違いを防ぐためだけであれば、実際にラッパーを使用して一部の変数の変更を防ぐことができます。例えば:
function setSession($k, $v) {
if ($k!='can_access_to_all')
$_SESSION[$k] = $v;
}
ただし、開発者がラッパーを使用せずにセッションを直接変更することを妨げるものではありません。
他にできることは、すべての固定セッションを元に戻すインクルードを最後に追加することです。
//do stuff
//include restoresession.inc
そしてrestoresession.incで
$_SESSION['can_access_to_all'] = 0
現在は、現在のページに対して引き続き変更できますが、リダイレクト時に本来あるべき状態にリセットされます。
しかし、主な問題は、信頼できない開発者に特定のファイル/設定を保持させたいと思うのはなぜですか?
//UPDATE FOR SESSION WITH CLASS、実際のクラスとそのセッターへのアクセスを防止できる場合に最適
class MySettings
{
private $can_access_to_all;
/**
* Construct
*/
final public function __construct()
{
//remove if not needed, or use it to make
$this->can_access_to_all = 0;
}
/**
* handle requests
*/
final public function __get($prop) {
return $this->$prop;
}
/**
* Prevent setting of properties
*/
final public function __set($prop, $val) {
trigger_error("Property cannot be set directly");
}
}
$_SESSION['MySettings'] = new MySettings();