2011-05-03 82 views
3

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

回答

3

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

0

你应该使用一个包装对象访问会话变量,即在它处理第一个请求调用session_start(),然后保存一个标志,意味着已完成这项工作,它只是它的构造函数中调用session_start()

可以使用Singleton模式或所谓依赖注入是,尽管原来的名字,只是传递一个参考的(叫)$Session对象到需要它的每一个对象。

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