Надеюсь, я объясню свою проблему достаточно хорошо. Я пытался найти похожий вопрос, но ничего не смог найти, возможно, я тоже искал неправильные термины.
Я работаю над новым сайтом, где пользователи могут входить в систему и изменять свои профили, отправлять рецепты и т. Д.
Когда я впервые зашел на сайт, я сделал так, чтобы пользователям приходилось входить в систему, чтобы начать. Если они не вошли и перейдут на страницу профиля, они будут перенаправлены на домашнюю страницу.
Но сейчас я больше думаю о сайте, и большая часть контента скрыта, потому что вам нужно войти в систему, чтобы даже просмотреть его. Что не позволяет людям делиться своими страницами, и это не очень хорошо для SEO.
Как мне создать страницу, где можно просмотреть основной контент. Но если вы вошли в систему, дополнительные функции есть (обновление их профиля, отправка рецептов и т. Д.).
Вот мой конфигурационный файл, который проверяет, вошли ли они в систему или нет, и если нет, перенаправляет на домашнюю страницу. Я попытался просто удалить заголовок, но затем я получаю пустые страницы, когда не вошел в систему.
//Function to check if user is logged in, and if so, return user data as an object
function check_user($secret_key, &$db) {
if (!isset($_SESSION['userid']) || !isset($_SESSION['hash'])) {
header("Location: index.php");
exit;
} else {
$check = sha1($_SESSION['userid'] . $_SERVER['REMOTE_ADDR'] . $secret_key);
if ($check != $_SESSION['hash']) {
session_unset();
session_destroy();
header("Location: index.php");
exit;
} else {
$query = $db->execute("select `id`,`nickname`, `joindate`, `last_active` from `Profile` where `id`=?", array($_SESSION['userid']));
$userarray = $query->fetchrow();
if ($query->recordcount() == 0) {
session_unset();
session_destroy();
header("Location: index.php");
exit;
}
foreach ($userarray as $key => $value) {
$user->$key = $value;
}
$query = $db->execute("update `Profile` set `last_active`=? where `id`=?", array(time(), $user->id));
return $user;
}
}
}
Тогда на защищенные в данный момент страницы. Я бы добавил это.
$userprofile = check_user($secret_key, $db);
Я все еще хочу иметь возможность использовать объект $ userprofile для проверки пользователя. Но я все еще хочу, чтобы «незащищенный» контент был доступен для просмотра, а не перенаправлять его на домашнюю страницу.
Есть ли способ изменить то, что у меня есть, надеюсь, кое-что из этого можно сохранить. Я использую ADODB.
Вам нужно будет переписать функцию так, чтобы она больше не перенаправляла себя. Это можно сделать, переписав его так, чтобы он возвращал объект пользователя или NULL
, Если он вернется NULL
вызывающий абонент может решить, может ли произойти перенаправление.
Если вы не хотите переписывать весь свой код сразу, вы можете добавить в свою функцию новый параметр, который указывает, должно ли происходить перенаправление в вашей функции проверки входа в систему или нет. Этот параметр должен иметь значение по умолчанию, которое позволяет функции вести себя как обычно.
function check_user($secret_key, &$db, $redicrect = TRUE) {
if (!isset($_SESSION['userid']) || !isset($_SESSION['hash'])) {
if ($redirect) {
header("Location: index.php");
exit;
}
return NULL;
}
$check = sha1($_SESSION['userid'] . $_SERVER['REMOTE_ADDR'] . $secret_key);
if ($check != $_SESSION['hash']) {
if ($redirect) {
session_unset();
session_destroy();
header("Location: index.php");
exit;
}
return NULL;
}
//...
}
Других решений пока нет …