функция redirect () не работает - PullRequest
0 голосов
/ 14 февраля 2012

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


Контроллер входа

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Login extends CI_Controller 
{
    public function __construct() 
    {
        parent::__construct();
        $this->load->model('User','user'); /* This call the model to retrieve data from db */
    }

    public function index()
    {
        if(!file_exists('application/views/_login.php'))
        {
            show_404();
        }

        $this->load->library('form_validation');

        $this->form_validation->set_error_delimiters('<h4 style="text-align:center;">','</h4>');

        $this->form_validation->set_rules('username','username','trim|required|xss_clean');
        $this->form_validation->set_rules('password','password','trim|required|xss_clean|callback_pass_check');

        if($this->form_validation->run() == FALSE)
        {
            /* Data to pass to view */
            $data['title'] = "User Access";
            $data['author'] = "Salvatore Mazzarino";
            $data['year'] = date('Y');

            $this->load->view('templates/_header',$data);
            $this->load->view('_login',$data);
            $this->load->view('templates/_footer',$data);
        }
        else 
        {   
            redirect('home', 'refresh');            
        }
    }

    public function pass_check($pass)
    {
        $result = $this->user->find_user($this->input->post('username'),$pass);

        if(!empty($result))
        {
            foreach ($result as $row) 
            {
                $session_array = array('id'=> $row->id, 'username'=> $row->username); /* Create a session passing user data */

                $this->session->set_userdata('logged_in', $session_array);
            }
            return TRUE;
        }
        else
        {
            $this->form_validation->set_message('pass_check',"Invalid username or password!</br>Try again, please!");
            return FALSE;
        }
    }
}

/* END OF FILE */

Домашний контроллер

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class Home extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        session_start();
    }

    public function index()
    {
        if($this->session->userdata('logged_in'))
        {            
            $data['title'] = "Management Emergency";
            $data['author'] = "Salvatore Mazzarino";
            $data['year'] = date('Y');

            $this->load->view('templates/_header', $data);
            $this->load->view('_home',$data);
            $this->load->view('templates/_footer',$data);
        }
        else
        {
            redirect('login', 'refresh');
        }
    }

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

/* END OF FILE */

Модель в контроллере входа работает очень хорошотак что это не проблема запроса.Перед добавлением сеанса все работает, но когда я добавил сеанс, остановился, чтобы работал, поэтому я думаю, что это может быть проблемой или redirect() или сеанс

Home View

<div data-role = "page">

<div data-role = "header" data-position = "inline">
        <a href="" data-icon = "home" data-iconpos = "notext"></a>
            <?php echo heading($title,1) ?>
        <a href="" data-icon = "info" data-iconpos = "notext" data-transition= "flip"></a>
</div>

<div class = "menu-content">
        <ul data-role = "listview" data-inset="true">
                <li data-role = "list-divider">Emergency Menù</li>
                <li class = "menu-item">
                        <a href="">
                                <div class = "image-wrapper">
                                        <img src="/assets/images/user.png" class = "ui-li-icons" />
                                </div>
                                Add patient
                        </a>
                </li>
                <li class = "menu-item">
                        <a href="#">
                                <div class = "image-wrapper">
                                        <img src="/assets/images/home.png" class = "ui-li-icons" />
                                </div>
                                Show all hospital
                        </a>
                </li>
                <li class = "menu-item">
                        <a href="#">
                                <div class = "image-wrapper">
                                        <img src="/assets/images/favorite.png" class="ui-li-icons" />
                                </div>
                                Find patients
                        </a>
                </li>
                <li class="menu-item">
                        <a href="#">
                                <div class = "image-wrapper">
                                        <img src="/assets/images/email.png" class="ui-li-icons" />
                                </div>
                                Send medical infos
                        </a>
                </li>
        </ul>

Вид входа

<div data-role ="dialog">

<div data-role = "header" data-theme="e">
    <?php echo heading($title,1) ?>
</div>

<div data-role ="content">

    <?php 

        $var = validation_errors();

        if(!empty($var))
        {
            echo form_error('username');
            echo form_error('password');
        }
        else
        {                    
                echo heading('911 - First Aid',2,'style="text-align:center; color:red;"');

                echo form_open('login');
    ?>
                    <div data-role ="fieldcontain" class="ui-hide-label">
                        <label for="username">Username:</label>
                        <input type="text" name="username" id="name" value="" placeholder="Username"/>
                    </div>

                    <div data-role ="fieldcontain" class="ui-hide-label">
                        <label for="password">Password</label>
                        <input type="password" name="password" id="password" value="" placeholder="Password"/>
                    </div>

                    <div data-role ="fieldcontain">
                        <input type="submit" value="Login" data-theme ="b"/>
                    </div>

                </form>

   <?
        }
   ?>

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Существует проблема с CodeIgniter, сохраняющим свои данные сеанса после перенаправления. Ваш if($this->session->userdata('logged_in')) в вашем home.php контроллере будет оценивать false каждый раз, потому что сеанс сбрасывается. Вы можете использовать нативные сессии php, чтобы пропустить эту проблему.

См .: http://codeigniter.com/wiki/Native_session/. Удачи!

UPDATE

Очевидно, это верно только для CodeIgniter 1.7.2 при использовании с IE6. Это не влияет на большинство браузеров.

0 голосов
/ 02 мая 2012

откройте файл application / config / autoload.php и добавьте 'url' в массив помощников;

$autoload['helper'] = array('url');

Я надеюсь, что это поможет вам решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...