Суть этого вопроса состоит в том, чтобы выяснить, почему тот же код, когда он заключен в теги {php} в шаблоне smarty, — не работает полностью по сравнению с тем, когда «тот же код» содержится в тегах (в шаблоне, не являющемся 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 а не их исходная посадочная позиция. Таким образом, кажется, что эти строки в шаблоне smarty не работают или не передают информацию:
$_SESSION["page_address"] = $_SERVER["PHP_SELF"];
и это
if ($_SESSION["page_address"]
всегда равно нулю.
Почему это так и что я могу сделать, чтобы это исправить.
Задача ещё не решена.
Других решений пока нет …