这个问题的核心是确定为什么相同的代码,当被{php}标签包含在智能模板中时 - 与标签中包含的“相同代码”(在非-smarty模板)。具体来说,智能代码版本(虽然部分功能)不会将用户返回到原始登录页面。
更多信息:我正在使用一个脚本,该脚本提供了一个用于自定义的智能模板框架。在其他'纯php'模板网站上,我一直在使用以下代码分别用于网关页面和所有其他页面。代码的部分功能是在首次定向到网关页面后(如果它们没有设置相关的cookie),用户(在获取cookie之后)会被重定向回他们最初登陆的页面。
[因为如此相似,只会包含智能版本。唯一的区别是开始和结束标签。]
除网关页面以外的所有页面上的代码:
{php}
session_start();
function check_if_spider()
{
$spiders = array('Googlebot','google','Yammybot','Openbot','Yahoo','Slurp','msnbot', 'ia_archiver','Lycos',
'Scooter','AltaVista','Teoma','Gigabot','Googlebot-Mobile','Baiduspider','R6_FeedFetcher','NetcraftSurveyAgent',
'Sogou web spider','bingbot','facebookexternalhit','PrintfulBot','msnbot','Twitterbot','UnwindFetchor','urlresolver','Butterfly', 'TweetmemeBot', 'ia_archiver');
// Loop through each spider and check if it appears in
// the User Agent
foreach ($spiders as $spider)
{
if (stristr($_SERVER['HTTP_USER_AGENT'],$spider) == true)
return TRUE;
}
return FALSE;
}
if (check_if_spider() == false) {
if (empty($_COOKIE["accepted"])) {
$_SESSION["page_address"] = $_SERVER["PHP_SELF"];
header("Location: http://www.domain.name/gateway.shtml");
exit;
}
}
{/php}
这是网关页面上的代码(实际上,这是一个非智能生成的php页面,所以使用正常的php标签)
<?php
$inoneday = $_SESSION['inoneday'];
if (empty($inoneday)) $inoneday = '';
$baseaddress = $_SESSION['baseaddress'];
if (empty($baseaddress)) $baseaddress = '';
$page_address = $_SESSION['page_address'];
if (empty($page_address)) $page_address = '';
session_start();
//Expire 25 days in the future
//seconds * minutes * hours * days + current time
$inoneday = 60 * 60 * 24 * 25 + time();
setcookie('accepted', date("G:i - m/d/y"), $inoneday);
if ($_SESSION["page_address"] != NULL) {
$baseaddress = "http://www.domain.name";
header('Location: '.$baseaddress . $_SESSION['page_address']);
exit; }
else {
header("Location: http://www.domain.name/index.php");
exit; }
?>
当用户登陆其中一个网站页面时,他们会被正确地重定向回网关页面 - 只是在网关页面之后,他们总是被引导回:http://www.domain.name/index.php而不是他们原来的着陆位置。因此,智能模板中的这些行似乎无法正常工作或传输信息:
$_SESSION["page_address"] = $_SERVER["PHP_SELF"];
那个
if ($_SESSION["page_address"]
总是等于null。
为什么会这样,我该怎么做才能解决它。