Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter登录和用户会话_Php_Codeigniter_Session_Login - Fatal编程技术网

Php codeigniter登录和用户会话

Php codeigniter登录和用户会话,php,codeigniter,session,login,Php,Codeigniter,Session,Login,我通过以下指南建立了一个用户登录到我的站点: 我对会议的安排没有什么疑问 我需要启动会话();在每个控制器中,或者在codeigniter中有一种方法,它将自动在所有控制器中?(我应该这样做吗?) 还有另外一种方法,rether可以在每个函数中加入: if($this->session->userdata('logged_in')) { //function code }else{ //If no session, redirect

我通过以下指南建立了一个用户登录到我的站点:

我对会议的安排没有什么疑问

我需要启动会话();在每个控制器中,或者在codeigniter中有一种方法,它将自动在所有控制器中?(我应该这样做吗?)

还有另外一种方法,rether可以在每个函数中加入:

    if($this->session->userdata('logged_in'))
    {
       //function code
    }else{
     //If no session, redirect to login page
     redirect('../login', 'refresh');
   }
或者我应该为每个控制器函数都这样做(例如,如果我有一个名为page的控制器,他有一些函数:index、edit、view,我需要为它们中的每一个都放上它

最后一个问题,我在每个被视图/标题调用的页面顶部都有一个注销按钮 我是否也应该将此功能:

 function logout()
 {
   $this->session->unset_userdata('logged_in');
   session_destroy();
   redirect('home', 'refresh');
 }
在每个控制器或我可以做它的“高贝尔”功能在某种程度上

编辑: 我在hooks.php中使用此选项:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files.  Please see the user guide for info:
|
|   http://codeigniter.com/user_guide/general/hooks.html
|
*/

$hook['post_controller_constructor'] = array(
                                'class'    => 'SessionData',
                                'function' => 'initializeData',
                                'filename' => 'loginHelper.php',
                                'filepath' => 'hooks',
                                'params'   => array()
                                );
and this in loginHelper.php:
<?
class SessionData {
    var $CI;

    function __construct(){
        $this->CI =& get_instance();
        if(!isset($this->CI->session))  //Check if session lib is loaded or not
          $this->CI->load->library('session');  //If not loaded, then load it here
    }

    function initializeData() {
          // This function will run after the constructor for the controller is ran
          // Set any initial values here
          if(!$this->CI->session->userdata('logged_in')){    //call session methods with super object
            redirect('../login', 'refresh');    
          }else{
            $data['user'] = $this->CI->session->userdata('logged_in');
          }
    }
}
?>

    /* End of file hooks.php */
    /* Location: ./application/config/hooks.php */

/*文件结尾hooks.php*/
/*位置:./application/config/hooks.php*/

用户['data']不是在所有页面中都创建的。我错在哪里?

关于注销的第二个问题,我通常将
注销
功能放在
用户
控制器中,并称之为


对于你的第一个问题,我看到了一个如何在控制器中进行用户登录并在常规控制器中扩展该控制器的教程,这就是如何避免在每个函数中进行登录检查的方法。我正在尝试查找该教程,一旦获得该教程,我将与大家分享,但概念是这样的。

你不需要将
会话\u start()放入;
在每个控制器中

您只需在
config
目录中的
autoload.php
文件中启动会话类即可

$autoload['libraries'] = array('database', 'session', 'encrypt');
另外,最好在类的构造函数中检查用户是否登录

if(!$this->session->userdata('logged_in'))
    redirect('loginController/loginFunction', 'refresh');

要在注销时销毁所有会话,可以使用
sess_destroy();

初始化会话

要自动加载会话,请打开
应用程序/config/autoload.php
文件,并将要加载的项添加到
自动加载
数组中,以便:
$autoload['libraries']=array('Session');
您根本不使用
会话启动();
会话销毁();

  • 会议文件:
  • 自动加载资源:
检查登录名

使用它可以避免繁重的代码重复,这是一个更好的练习。浏览页面底部并阅读钩子点,这样你们就有了一个想法。这很简单!一定要学习钩子

注销


你回答。

经过大量工作,我解决了登录检查的问题

我没有使用钩子。我在核心文件夹中构建了一个MY_控制器,并将其扩展到除登录控制器之外的所有控制器中

在MY_控制器中,我使用登录检查

CodeIgniter核心控制器:

钩子给我带来了一个问题。我在这里做了所有事情:但我遇到了这个问题:遇到了一个PHP错误严重性:注意消息:未定义属性:SessionData::$session Filename:hooks/loginHelper.PHP行号:17致命错误:调用成员函数userdata()在第17行的/home1/site/public_html/subdomain/application/hooks/loginHelper.php中的一个非对象上,如果我是你,我会放置一些回显行,以确定哪些是/没有被处理以进行调试。我想你的助手需要重构。从_构造()中删除会话检查并将会话添加到自动加载中,就像我上面定义的那样。它不起作用。(重定向也不起作用)看起来钩子什么都不做(在配置中将其设置为TRUE),您需要重构代码,可能还需要重构逻辑。