如何修复“重定向你太多次了。”

I was created simple login and register system and have some issue. But not sure is it with cookie or cookie and php. My code is next:

On index.php ( login page i have this code in header ):

<?php
include('includes/config.php');
if(!$user->is_logged_in()){
header('Location: index.php');
exit;
}
if(isset($_POST['submit'])){

$username = $_POST['username'];
$password = $_POST['password'];

if($user->login($username,$password)){ 
    $_SESSION['username'] = $username;
    header('Location: home.php');
    exit;

} else {
    $error[] = 'Wrong username or password or your account has not been activated.';
}
}
?>

And on home page when user is successfully logged in:

<?php include('includes/config.php'); 
if(!$user->is_logged_in()){
header('Location: index.php');
exit;
}
?>

Config file:

<?php
ob_start();
session_start();

date_default_timezone_set('Europe/London');

define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','pass');
define('DBNAME','db_name');

define('DIR','http://example.com/');
define('SITEEMAIL','noreply@domain.com');

try {
$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
exit;
}
include('classes/user.php');
include('classes/phpmailer/mail.php');
$user = new User($db);
?>

Problem is next, when user successfully logged in and redirected to home page, when user is log out everything is fine, but when user logged in and without log out go back to index page ( log in page ) i get this error:

This page isn’t working website.com redirected you too many times. Try clearing your cookies. ERR_TOO_MANY_REDIRECTS

And when i clear my cookie from google chrome browser, error is fixed but user must login again and when same step do again i get again same error.

dsgixl5195
dsgixl5195 如果登录页面已经登录,则应将其重定向到主页。如果主页未登录,则主页应重定向到登录页面。检查用户名和密码的脚本在检查之前不应进行任何重定向。他们。如果他们提供了正确的密码,则会转到主页,否则会返回登录页面。
一年多之前 回复
doulin6761
doulin6761 是的,但是当用户成功登录后,他们将被重定向到主页(home.php)。然后当登录用户想要没有注销时看到登录页面有错误。@Barmar
一年多之前 回复
douluoyou9876
douluoyou9876 它实际上是index.php和home.php中两个if语句的循环,因为你在登录时设置了会话。尝试在if语句上使用if语句(isset($_SESSION['username'];))
一年多之前 回复
doufen5175
doufen5175 设置$_POST['submit']时,不应检查会话变量。他们正在登录,因此您不想在检查密码之前重定向它们。
一年多之前 回复
donglu1973
donglu1973 如果他们没有登录,索引页面应该将它们重定向到登录页面。登录页面不应包含索引页面,因为索引页面应该只在您登录后可见。
一年多之前 回复
duanjianxi8439
duanjianxi8439 每当我收到错误时我都无法删除cookie,我需要修复此错误。每个登录并执行此操作的用户都会收到与我相同的错误。@Roshan
一年多之前 回复
dongxun6458
dongxun6458 我没有使用Wordpress@Roshan
一年多之前 回复
dongyouzhi7218
dongyouzhi7218 如果您使用wordpress,请尝试阅读本文及其解决方案。kinsta.com/blog/err_too_many_redirects
一年多之前 回复
dongsan6889
dongsan6889 好吧,如果他们没有登录,你将他们发送到同一页面,检查并无限制地发送到同一页面。你在这里期待什么?
一年多之前 回复

2个回答



您应该将其分解为三个脚本,具有以下逻辑:</ p>

主页( 和所有其他内容页面):如果他们没有登录,它会重定向到登录页面。</ p>

登录页面:如果他们已经登录,则重定向到主页。 </ p>

密码检查程序:这是登录页面上登录表单的操作。 它会检查用户名和密码。 如果它们是正确的,它会设置会话变量,表示用户已登录,并重定向到主页。 如果它们不正确,它会重定向回登录页面。</ p>
</ div>

展开原文

原文

You should break this up into three scripts, with the following logic:

Home page (and all other content pages): If they're not logged in, it redirects to the login page.

Login page: If they're already logged in, redirect to the home page.

Password checker: This is the action of the login form on the login page. It checks the username and password. If they're correct, it sets the session variable that says that the user is logged in, and redirects to home page. If they're not correct, it redirects back to the login page.

douju2599
douju2599 我发现了问题并解决了它。 谢谢。
一年多之前 回复
doujiaozhao2489
doujiaozhao2489 我不知道你做错了什么。 逻辑非常简单。
一年多之前 回复
douchuifk90315
douchuifk90315 我不确定我现在是否正确编写代码...我现在没有出现重定向错误,但登录页面上的用户登录时会显示登录表单
一年多之前 回复

Problem was on index page ( login page ):

OLD code

if( $user->is_logged_in()){ 
    header('Location: index.php'); --> THIS IS WHERE PROBLEM IS
} 

NEW code

if( $user->is_logged_in()){ 
    header('Location: home.php'); // Work correctly
} 
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐