当需要检索或保留会话值时,在类构造函数上使用session_start是否正常?最佳做法?
除非从__contruct调用session_start,否则不能从类中检索会话变量。
session_start();
if(isset($_REQUEST['siteid'])){
$siteid = $_REQUEST['siteid'];
$_SESSION['siteid'] = $siteid;
echo $siteid;
}else{
$siteid = "";
}
require_once 'common/lib_constant.php';
require_once 'common/database.php';
require_once 'common/common.class.php';
$commonClass = new commonClass();
答案 0 :(得分:3)
最佳做法是从引导程序开始会话 和会话本身通过某种智能包装类访问(参见ZF的例子) 这样你应该100%确定你的代码中没有标题问题和重复的session_start调用 一个类可以多次实例化/请求... bootstrap只运行一次/ request。
答案 1 :(得分:0)
您应该使用包装器对象来访问会话变量,在它处理的第一个请求上调用session_start()
,然后保存一个标志,表示已完成此操作,或调用session_start()
只是在其构造函数中。
您可以使用单例模式或所谓的依赖注入,即使是原始名称,只需将引用传递给(调用它){{ 1}}反对需要它的每个对象。
只应存在$Session
对象的一个实例。