Проверьте активность пользователя на сайте входа в php - PullRequest
0 голосов
/ 31 октября 2019

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

    <?php
   session_start(); //start session.
   if(!isset($_SESSION['User_id']) && $_SESSION['User_id'] == ""){
       header('Location: ../users/login.php?error=5'); //redirect URL
   }
   else{
       header('Location: ../users/index.php?error=6'); //session gestartet
       }
   ?>

index.php ошибка прямого открытия и обратно на сайт входа, работает

<?

    php session_start(); 
    if(!isset($_SESSION['User_id'])){ 
    $host = $_SERVER['HTTP_HOST']; 
    $extra = '../users/login.php?error5'; // direct access error 
    header("Location: http://$host/$extra"); } 
    ?>  

error введите описание изображения здесь

1 Ответ

0 голосов
/ 01 ноября 2019

Вы, вероятно, получаете петлю перенаправления, поэтому ваша логика, скорее всего, неверна, как отмечали другие пользователи в отношении этой строки:

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);
...