PHP $ SESSIONS是否适用于包含的页面?

时间:2013-03-07 11:36:56

标签: php session

假设我有header.tpl和footer.tpl,介于两者之间的是body.tpl。

假设我想通过检查特定会话是否设置为:

来限制对body.tpl的访问。
session_start();
if (isset($_SESSION['limited'])) {
  //render body.tpl
} else {
  //direct somewhere else
}

如果session_start(); if (isset()) {部分位于header.tpl中且} else {}位于footer.tpl文件中,这会有效吗?

我的计划是在页眉和页脚中进行会话检查,并将其包含在每个页面中,因此我不必在呈现模板的PHP文件中执行此操作。

像这样(body.tpl的内容):

<?php require_once(TEMPLATE_PATH. "/header.tpl"); ?>
//body.tpl contents
<?php require_once(TEMPLATE_PATH. "/footer.tpl"); ?>

通过PHP文件调用body.tpl requires所有必需的文件,并实例化用于填写tpl文件的所有类。如果我在PHP文件中进行会话检查,它就会按预期工作。

2 个答案:

答案 0 :(得分:0)

您可以在执行请求时从任何PHP代码访问$ _SESSION对象。确保只调用一次session_start。

PS。这种方法会带来代码重复,你会后悔的。

答案 1 :(得分:0)

如果您使用模板引擎(尝试http://www.smarty.net/

,您会做得更好

你可以轻松地完成这项工作。你将能够沿着这些方向做点什么。

假设您要显示页面foo.tpl,您还有两个其他智能模板 header.tpl 2. footer.tpl

foo.tpl看起来像这样

{include file="header.tpl"}

{$foo}

{include file="footer.tpl"}

然后在你的php页面中,做你想做的任何逻辑,通过

将输出加载到变量中
$smarty-assign('foo',$my_content);
$smarty->display( "foo.tpl" );

这会渲染foo.tpl,包含header.tpl和footer.tpl的内容以及$ foo