【问题标题】:Codeigniter PHP sessions not working properly [duplicate]Codeigniter PHP会话无法正常工作[重复]
【发布时间】:2017-11-10 15:51:24
【问题描述】:

我正在使用 CodeIgniter 框架开发一个网站,并尝试为管理员和用户创建一些会话。但是当我尝试使用这些会话时,它们无法正常工作。当我退出时,我收到了找不到会话的错误:$_SESSION['user_level']

此外,当我退出并单击登录表单视图页面时,我没有执行任何操作就收到此错误:

A PHP Error was encountered

Severity: Notice

Message: A session had already been started - ignoring session_start()

Filename: controllers/Auth.php

Line Number: 80

Backtrace:

File: /home/ubuntu/workspace/application/controllers/Auth.php
Line: 80
Function: session_start

File: /home/ubuntu/workspace/index.php
Line: 315
Function: require_once

这是我的控制器auth.php,具有用户登录、管理员登录和注销功能。 :

public function logout()
    {
        $this->session->sess_destroy();
        redirect("https://kadokado-ferran10.c9users.io/", "refresh");
    } 


    public function adminlogin() 
    {
        session_start();
        $this->form_validation->set_rules('admin_email', 'Admin_email', 'required');
            $this->form_validation->set_rules('admin_wachtwoord', 'Wdmin_wachtwoord', 'required|min_length[5]');
            if ($this->form_validation->run() == TRUE) {

            $admin_email = $_POST['admin_email'];
            $admin_wachtwoord = ($_POST['admin_wachtwoord']);

             //check admin in database
            $this->db->select('*');
            $this->db->from('admin');
            $this->db->where(array('admin_email'=>$admin_email, 'admin_wachtwoord' => $admin_wachtwoord));
            $query = $this->db->get();
            $admin = $query->row();

              //Als admin bestaat
            if($admin->admin_email) {

                $this->session->set_flashdata("success","U bent nu ingelogd als admin");

            //Maak admin sessions aan
            $_SESSION['user_logged'] = FALSE; 
            $_SESSION['admin_logged'] = TRUE;
            $_SESSION['is_logged'] = true.
            $_SESSION['user_level'] = 10;
            $_SESSION['admin_id'] = $admin->admin_id;
            $_SESSION['admin_email'] = $admin->admin_email;


             //link naar profiel pagina
            redirect("IndexController", "refresh");
            } else {

                $this->session->set_flashdata('error','Invalid email or password');
                //wanneer er een foutmelding is link weer naar de login pagina
                redirect("https://kadokado-ferran10.c9users.io/auth/adminlogin" , "refresh");
            }

            }
              //laad alle adminlogin views
        $this->load->view('templates/header');
        $this->load->view('adminviews/adminlogin');
        $this->load->view('templates/footer');
    }




    public function login()
    {
        //laad login view
            session_start();
            $this->form_validation->set_rules('email', 'Email', 'required');
            $this->form_validation->set_rules('wachtwoord', 'Wachtwoord', 'required|min_length[5]');
            if ($this->form_validation->run() == TRUE) {

            $email = $_POST['email'];
            $wachtwoord = ($_POST['wachtwoord']);


            //check gebruiker in database
            $this->db->select('*');
            $this->db->from('users');
            $this->db->where(array('email'=>$email, 'wachtwoord' => $wachtwoord));
            $query = $this->db->get();

            $user = $query->row();
            //Als gebruiker bestaat
            if($user->email) {

                $this->session->set_flashdata("success","U bent nu ingelogd");

            $_SESSION['user_logged'] = TRUE; 
            $_SESSION['admin_logged'] = FALSE;
            $_SESSION['is_logged'] = true.
            $_SESSION['user_level'] = 1; 
            $_SESSION['user_id'] = $user->user_id;
            $_SESSION['email'] = $user->email;
            $_SESSION['voornaam'] = $user->voornaam;
            $_SESSION['achternaam'] = $user->achternaam;
            $_SESSION['woonplaats'] = $user->woonplaats;
            $_SESSION['straat'] = $user->straat;
            $_SESSION['huisnummer'] = $user->huisnummer;
            $_SESSION['postcode'] = $user->postcode;
            $_SESSION['beschrijving'] = $user->beschrijving;
            $_SESSION['profiel_foto'] = $user->profiel_foto;




            //link naar profiel pagina
            redirect("user/profile", "refresh");
            } else {

                $this->session->set_flashdata('error','Invalid email or password');
                //wanneer er een foutmelding is link weer naar de login pagina
                redirect("https://kadokado-ferran10.c9users.io/auth/login" , "refresh");
            }



            }
                  //laad login view
                  $this->load->view('loginregistreer');
    }

这是我标题中的一些代码,用于在我创建的会话中回显一些按钮:

<li> 
<?php 
if($_SESSION['user_level'] == 1): ?> 
<a class="l3" href="https://kadokado-ferran10.c9users.io/user/profile">Account</a> 
<?php endif;?> 
</li> 
<li> 
<?php if($_SESSION['user_level'] == 10):?> 
<a class="l3" href="https://kadokado-ferran10.c9users.io/IndexController">Admin dashboard</a> 
<?php endif; ?> 
</li> 
<li> 
<?php if($_SESSION['user_level'] <= 10):?> 
<a class="l4" href="https://kadokado-ferran10.c9users.io/auth/logout">Uitloggen</a> 
<?php else: ?> 
<a class="l5" href="https://kadokado-ferran10.c9users.io/auth/register">Registreren</a> 
</li><li> 
<a class="l6" href="https://kadokado-ferran10.c9users.io/auth/login">Inloggen</a> 
<?php endif ;?> 
</li>

它的工作原理是,当我以管理员身份登录时,它会在标题中显示正确的按钮,但是当我注销时,在包含标题的每个页面上都会出现 3 次此错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined index: user_level

Filename: templates/header.php

Line Number: 31

Backtrace:

File: /home/ubuntu/workspace/application/views/templates/header.php
Line: 31
Function: _error_handler

File: /home/ubuntu/workspace/application/views/home.php
Line: 1
Function: include_once

File: /home/ubuntu/workspace/application/controllers/Site.php
Line: 9
Function: view

File: /home/ubuntu/workspace/index.php
Line: 315
Function: require_once

有人知道我为什么会收到这些错误吗?

【问题讨论】:

  • 尝试查看文档。

标签: php codeigniter session codeigniter-3


【解决方案1】:

从您的代码中删除 session_start();,codeigniter 会话库会处理它。

首先您必须加载会话库。

$this->load->library("session");

如果您已经在自动加载配置中加载,则无需再次加载。

在会话中设置数据

$this->session->set_userdata("KEY","VALUE");

从会话中获取数据

$this->session->userdata("KEY");

从这里阅读更多信息:

https://www.codeigniter.com/user_guide/libraries/sessions.html

【讨论】:

【解决方案2】:

你做错了。

设置会话应该是

$newdata = array(
        'user_logged'  => TRUE,
        'admin_logged'     => FALSE,
        'logged_in' => TRUE
        ......
);

$this->session->set_userdata($newdata);

检索

$this->session->userdata('admin_logged');

加载库

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

Read this Using the Session Class

【讨论】:

  • 普通 php 也应该可以工作?
  • 那么 $this-&gt;session-&gt;sess_destroy();session_start(); 使用 CI 或纯 CI 是什么
  • 我删除了会话开始,所以现在它应该可以工作但它没有
  • 按原样重新格式化代码
  • 关于此的任何更新
猜你喜欢
  • 2018-11-22
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多