Заставить зарегистрированных пользователей видеть только зарегистрированные страницы

1

У меня есть несколько простых страниц входа. Я попытался поместить код на страницу login.php чтобы попробовать, если это работает. Но это не так.

if(!isset($_SESSION['UserData']['Username'])){
    header("location:index.php");
}

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

<?php session_start(); /* Starts the session */
    /* Check Login form submitted */    
    if(isset($_POST['Submit'])){
        /* Define username and associated password array */
        $logins = array('Test1' => 'test1','Test2' => 'test2','Test3' => 'test3');

        /* Check and assign submitted Username and Password to new variable */
        $Username = isset($_POST['Username']) ? $_POST['Username'] : '';
        $Password = isset($_POST['Password']) ? $_POST['Password'] : '';

        /* Check Username and Password existence in defined array */        
        if (isset($logins[$Username]) && $logins[$Username] == $Password){
            /* Success: Set session variables and redirect to Protected page  */
            $_SESSION['UserData']['Username']=$Username; <-- this line amended to display username properly.
            header("location:index.php");
            exit;
        } else {
            /*Unsuccessful attempt: Set error message */
            $msg="<span style='color:red'>Invalid Login Details</span>";
        }
    }
?>
<!doctype html>
<html>
<head>
<title>Login Page</title>
<link href="style.css" rel="stylesheet" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link href='http://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' />
</head>
<body>
<section class="pd">
<div class="login">
<form action="" method="post" name="Login_Form">
    <h1>Login</h1>
      Username:<br/>
      <input name="Username" type="text" class="Input">
      <div class="formgap"></div>
      Password:<br/>
      <input name="Password" type="password" class="Input">
      <div class="formgap"></div>
      <?php if(isset($msg)){?><?php echo $msg;?> 
      <div class="formgap"></div>
      <?php } ?> 
      <div class="formgap"></div>
      <input name="Submit" type="submit" value="Login" class="Button3">
</form>
</div><!--login-->
</section>
</body>
</html>

Я попытался посетить login.php после входа в систему. Я все еще могу. Любые предложения для этого? Благодарю!

  • 0
    print_r($_SESSION) свою сессию и проверить сохраненные данные пользователя или нет?
  • 0
    @ Каран, не уверен, где поставить эту строку. Я все еще новичок в php.
Теги:
redirect
logout
login

4 ответа

1
Лучший ответ

Просто проверьте это на login.php

if(isset($_SESSION['UserData']['Username']) && !empty($_SESSION['UserData']['Username'])){
    header("location:index.php");
}

Пользователь будет перенаправлен на index.php если он вошел в систему.

1

вы проверяете, установлены ли userdata или нет. попробуй это

<?php 
 session_start(); /* Starts the session */
/* Check Login form submitted */    
if(isset($_SESSION['UserData']['Username'])){
     header("location:im.php");
        exit;
}
elseif(isset($_POST['Submit'])){
    /* Define username and associated password array */
    $logins = array('Test1' => 'test1','Test2' => 'test2','Test3' => 'test3');

    /* Check and assign submitted Username and Password to new variable */
    $Username = isset($_POST['Username']) ? $_POST['Username'] : '';
    $Password = isset($_POST['Password']) ? $_POST['Password'] : '';

    /* Check Username and Password existence in defined array */        
    if (isset($logins[$Username]) && $logins[$Username] == $Password){
        /* Success: Set session variables and redirect to Protected page  */
        $_SESSION['UserData']['Username']=$logins[$Username];
        header("location:im.php");
        exit;
    } else {
        /*Unsuccessful attempt: Set error message */
        $msg="<span style='color:red'>Invalid Login Details</span>";
    }
}
?>
<!doctype html>
<html>
<head>
<title>Login Page</title>
<link href="style.css" rel="stylesheet" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">

<link href='http://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' />
</head>
<body>
<section class="pd">
<div class="login">
<form action="" method="post" name="Login_Form">
 <h1>Login</h1>
  Username:<br/>
  <input name="Username" type="text" class="Input">
  <div class="formgap"></div>
  Password:<br/>
  <input name="Password" type="password" class="Input">
  <div class="formgap"></div>
  <?php if(isset($msg)){?><?php echo $msg;?> 
  <div class="formgap"></div>
  <?php } ?> 
  <div class="formgap"></div>
  <input name="Submit" type="submit" value="Login" class="Button3">
</form>
</div><!--login-->
</section>
</body>
</html>
  • 0
    Привет Vigneswaran S, ваш код работает. Спасибо!
  • 0
    @Jornes: все в порядке, бор :). если есть сомнения в php, спросите меня
1

Этого достаточно, попробуйте следующее:

if(!empty($_SESSION['UserData']['Username'])){
    header("location:index.php");
}
  • 1
    Вы можете писать !empty
  • 0
    Да вы правы.
Показать ещё 8 комментариев
0

Если вы получаете сеанс на страницах с ограниченным доступом, просто проверьте это

<?php 
     if(!isset($_SESSION['UserData']['Username'])){
         ?>
        <script>
        window.location='index.php';
        </script>
        <?php
     }
?> 

Для перенаправления используйте функцию javascript redirection вместо функции заголовка php.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню