Создать страницу, которую могут просматривать как зарегистрированные, так и не зарегистрированные

Надеюсь, я объясню свою проблему достаточно хорошо. Я пытался найти похожий вопрос, но ничего не смог найти, возможно, я тоже искал неправильные термины.

Я работаю над новым сайтом, где пользователи могут входить в систему и изменять свои профили, отправлять рецепты и т. Д.

Когда я впервые зашел на сайт, я сделал так, чтобы пользователям приходилось входить в систему, чтобы начать. Если они не вошли и перейдут на страницу профиля, они будут перенаправлены на домашнюю страницу.

Но сейчас я больше думаю о сайте, и большая часть контента скрыта, потому что вам нужно войти в систему, чтобы даже просмотреть его. Что не позволяет людям делиться своими страницами, и это не очень хорошо для 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.

1

Решение

Вам нужно будет переписать функцию так, чтобы она больше не перенаправляла себя. Это можно сделать, переписав его так, чтобы он возвращал объект пользователя или 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;
}
//...
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector