2017-05-13 5 views
1

나는 거의 2 일 동안 여기에서 붙어 있습니다. 자습서를 살펴 봤지만 내 코드에서 문제가 무엇인지 찾을 수 없습니다.로그인 페이지가 다시 codeingniter의 로그인 페이지로 리디렉션됩니다.

내 로그인 페이지가 다시 내 로그인 페이지로 리디렉션되고 이유를 모릅니다. 내 리디렉션 구문에 몇 가지 문제가있어 문제를 해결할 수 없다고 생각합니다. 전문가의 도움이 필요합니다.

내 코드는 다음과 같습니다.

컨트롤러 파일 : Verifylogin_controller.php

<?php 

// if(!isset($_SESSION)) 
// { 

session_start(); 

// } 

class Homelogin_controller extends CI_Controller 

{ 
    public 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function index() 
    { 
     if ($this->session->userdata('logged_in')) 
     { 
      $session_data = $this->session->userdata('logged_In'); 
      $data['username'] = $session_data['username']; 
      $this->load->view('Home_view', $data); 
     } 
     else 
     { 
      redirect('Login_controller', 'refresh'); 
     } 
    } 

    function logout() 
    { 
     $this->session->unset_userdata('logged_in'); 
     session_destroy(); 
     redirect('Homelogin_controller', 'refresh'); 
    } 
} 

?> 

모델 파일 : Login_model.php

<?php 
class Login_model extends CI_Model 

{ 
    function login($username, $password) 
    { 
     $this->db->where('username', $username); 
     $this->db->where('password', $password); 
     $query = $this->db->get('login'); 
     if ($query->num_rows() > 0) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

?> 

보기 파일

login_view.php

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Login with codeigniter</title> 
</head> 

<body> 
<h1>Simple Login with CodeIgniter</h1> 

<?php echo validation_errors(); ?> 
    <?php echo form_open(base_url().'Verifylogin_controller'); ?> 
    <label for="username">Username:</label> 
    <input type="text" size="20" id="username" name="username"/> 
    <span><?php echo form_error ('username');  ?>     </span> 
    <br/> 
    <label for="password">Password:</label> 
    <input type="password" size="20" id="passowrd" name="password"/> 
    <span><?php echo form_error ('password');  ?>     </span> 

    <br/> 
    <input type="submit" value="Login"/> 
    http://localhost/codeIgniter/CodeIgniter-3.1.4/Verifylogin_controller/login_validation 
<?php 
$this->session->flashdata('error'); 
?> 
</form> 
</body> 
</html> 

Home_view.php

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Simple Login with CodeIgniter - Private Area</title> 
</head> 

<body> 
<h1>Home</h1> 
    <h2>Welcome <?php echo $this->session->userdata('username') ?>!</h2> 
    <a href="Login_controller/logout">Logout</a> 
</body> 
</html> 
+0

파일 이름과 클래스 이름이 동일하지 않습니다. 수동으로 세션을 시작하는 대신 CI 세션 클래스를 사용하십시오. 닫는 PHP 태그를 제거하십시오. Login_controller 코드를 보여주십시오. – Tpojka

+0

그런 많은 오류가 발생하면 오류 메시지가 표시되지 않습니까? 디버깅 해보십시오. –

+0

그것들을 제거하려고 시도한 오류 –

답변

2

편집 :이 제대로 있었어야한다고 지적되면서 주석에 내 원래의 대답을 옮겼습니다.

$ _SESSION [ 'logged_In'] 부울을 설정하지 않았습니다. TRUE로 돌아 왔지만, 실제로 아무것도 설정하지 않았습니다. 로그인 컨트롤러에서 아무것도 반환하기 전에 true로 설정해야합니다. 아마도 리디렉션 문제가 실제로 발생하는 곳일 것입니다. 의견에 언급되어있을 수도 있지만이 화면에서는 볼 수 없습니다.

내 접근 방식입니다. 일부 문제가 있으며 일부 설명이 필요합니다. 당신은 사용자가 로그인하는지 테스트하고 로그인 페이지에 이미있어 여부를 확인해야

$seg = $this->uri->segment(2); 
if (($seg == "login") && (isset($uid)) && (ctype_digit($uid)) && (($uid != "0"))) { 
    redirect(base_url()); 
} elseif (($seg != "login") && ((!isset($uid)) || (!ctype_digit($uid)))) { 
    redirect(base_url() . 'index.php/user/login'); 
} 
  1. :하지만 여기 내 코드입니다. 제 경우에는 URI 세그먼트 2가 컨트롤러입니다. 그들이 이미 로그인되어 있고 로그인 페이지에 있다면 기본 URL로 리다이렉트합니다.
  2. 로그인하지 않은 상태에서 로그인 페이지를 제외한 다른 페이지에 있으면 로그인 페이지로 리디렉션됩니다.
  3. $ seg 변수를 설정할 필요가 없습니다. 나는 다른 장소에서 그것을 사용하고 헬퍼 코드를 다시 입력하고 싶지 않기 때문에 그것을한다.
  4. 나는 스텐실 템플릿 시스템을 사용하기 때문에 $ _SESSION [ 'uid'] 대신 $ uid를 사용할 수 있습니다. 모든 세션 변수를 뷰 페이지에 전달하도록 템플릿 코드를 수정했습니다. 스텐실을 사용하지 않으므로이 코드를 어디에 넣어야하는지 알아야합니다. 레이아웃 파일에이 파일이 있으므로 모든 단일 페이지에서 로그인을 확인할 필요가 없습니다. 코드에

의견

직접
  • 는 호출하지 마십시오으로 session_start()

      을.CI 세션 라이브러리를 사용하려면 세션 라이브러리 자동로드 구성을로드하십시오. 일부 문제가 있으므로 대안을 찾거나 자신의 의견을 올릴 수 있습니다. 이렇게하면 모든 페이지에서 세션을 호출하지 않아도됩니다.

    1. 비밀번호를 직접 붙여 넣는 경우 비밀번호를 일반 텍스트로 저장하는 것으로 보입니다. 암호 (password_hash)를 해시하고 데이터베이스에 저장해야합니다. 그런 다음 사용자의 입력을 해시하고 데이터베이스와 비교합니다 (password_verify).

    2. $ session_data = $ this-> session-> userdata ('logged_In')로 사용자 데이터를 설정하고 $ session_data [ 'username']에 액세스하려고했지만 사용자 이름을 실제로 저장하지 않았습니다. "logged_In"bool을 저장했습니다.

  • +0

    답변을 제공하지 않을 때 주석으로 작성해야합니다. –

    +0

    @joe 제안 사항을 제공 할 수 있습니까? 코드를 어떻게 개선 할 수 있습니까? –

    관련 문제