Вы, вероятно, получаете петлю перенаправления, поэтому ваша логика, скорее всего, неверна, как отмечали другие пользователи в отношении этой строки:
if(!isset($_SESSION['User_id']) && $_SESSION['User_id'] == ""){
Я полагаю, что у вас, вероятно, есть аналогичная строка, где,особенно если вы говорите, что изменили эту строку, чтобы использовать ||
вместо &&
.
Я бы сказал, что было бы полезно сделать ваши сценарии более удобочитаемыми с помощью функций (или класса /)методы), так что его проще использовать и поддерживать согласованность, вот только пример:
/ functions.php
<?php
# Have a simple function to determine login state
function isLoggedIn()
{
# Since $_SESSION['User_id'] must be filled to be logged in, empty() is the simplest
# and best to use here because it takes care of isset() and == '' at the same time
return (!empty($_SESSION['User_id']));
}
# Have a redirect function so you know it's going to be consistent
function redirect($to)
{
header('Location: '.$to);
exit;
}
# Maybe a site url is helpful
function baseUrl($path = false)
{
return 'http://'.str_replace('//', '/', $_SERVER['HTTP_HOST'].'/'.$path);
}
/ limited_page.php
<?php
session_start();
# Add the functions
include(realpath(__DIR__.'/..').'/functions.php');
# If the user is not logged in
if(!isLoggedIn()) {
# Redirect them to the login page
redirect(baseUrl('users/login.php?error=5'));
}
/ users / login.php
<?php
session_start();
# Add the functions
include(realpath(__DIR__.'/..').'/functions.php');
# If the user is logged in already
if(isLoggedIn()) {
# Redirect home since they don't need to log in again
redirect(baseUrl());
}
Предполагая, что страница индекса нейтральна, ее никуда не следует перенаправлять. Если ваша страница входа публикуется на другой странице для проверки учетных данных, это будет что-то вроде:
/ users / process_login.php
<?php
session_start();
# Add the functions
include(realpath(__DIR__.'/..').'/functions.php');
# Check if the login has been submitted
if(empty($_POST['submit'])) {
# Go back to login page if not
redirect('users/login.php?error=7');
}
# Do your checking with whatever login code you use...
// code here...
# Check if the user is logged in now
if($success) {
# Redirect to success page
$page = 'success.php';
}
else {
# Redirect back to login with failure msg
$page = 'users/login.php?error=5';
}
# Redirect
redirect($page);