在类中访问会话变量

时间:2011-05-03 19:58:46

标签: php session variables

当需要检索或保留会话值时,在类构造函数上使用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();

2 个答案:

答案 0 :(得分:3)

最佳做法是从引导程序开始会话 和会话本身通过某种智能包装类访问(参见ZF的例子) 这样你应该100%确定你的代码中没有标题问题和重复的session_start调用 一个类可以多次实例化/请求... bootstrap只运行一次/ request。

答案 1 :(得分:0)

您应该使用包装器对象来访问会话变量,在它处理的第一个请求上调用session_start(),然后保存一个标志,表示已完成此操作,调用session_start()只是在其构造函数中。

您可以使用单例模式或所谓的依赖注入,即使是原始名称,只需将引用传递给(调用它){{ 1}}反对需要它的每个对象。

只应存在$Session对象的一个​​实例。