Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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_Session Variables - Fatal编程技术网

PHP(CodeIgniter)会话为空

PHP(CodeIgniter)会话为空,php,codeigniter,session,session-variables,Php,Codeigniter,Session,Session Variables,我正在尝试在CodeIgniter中构建一个登录系统。到目前为止,一切正常,直到我不得不将细节保存到会话中。我尝试了多种方法,但无论我多么努力,当我转储会话数组时,它是空的 public function submit() { $this->load->helper(array('form')); // authenticate $username = $this->input->post('txtLogin'); $password = $this->input

我正在尝试在CodeIgniter中构建一个登录系统。到目前为止,一切正常,直到我不得不将细节保存到会话中。我尝试了多种方法,但无论我多么努力,当我转储会话数组时,它是空的

public function submit() 
{
$this->load->helper(array('form'));
// authenticate
$username = $this->input->post('txtLogin');
$password = $this->input->post('txtPassword');

//query the database
$result = $this->user->login($username, $password);

if($result)
{

 session_start();
 $sess_array = array();
 foreach($result as $row)
 {
   $sess_array = array(
     'id' => $row->GebruikerID,
     'username' => $row->Email
   );
   $this->session->set_userdata('logged_in', $sess_array);

   redirect('dashboard');
 }
这是我检查凭据的部分,如果成功,我将设置会话。 注意:我还尝试放置
session_start()在页面顶部,甚至在没有
session_start()的情况下进行了尝试在代码中

if($this->session->userdata('logged_in'))
{
    print_r($_SESSION);
    exit();
}
这是我检查会话是否在另一个控制器中设置的部分

打印($\u会话)
的结果:

我不知道哪里出了问题

编辑:

这是我的配置文件:

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

        /*
        |--------------------------------------------------------------------------
        | Base Site URL
        |--------------------------------------------------------------------------
        |
        | URL to your CodeIgniter root. Typically this will be your base URL,
        | WITH a trailing slash:
        |
        |   http://example.com/
        |
        | If this is not set then CodeIgniter will guess the protocol, domain and
        | path to your installation.
        |
        */
        $config['base_url'] = '';

        /*
        |--------------------------------------------------------------------------
        | Index File
        |--------------------------------------------------------------------------
        |
        | Typically this will be your index.php file, unless you've renamed it to
        | something else. If you are using mod_rewrite to remove the page set this
        | variable so that it is blank.
        |
        */
        $config['index_page'] = 'index.php';

        /*
        |--------------------------------------------------------------------------
        | URI PROTOCOL
        |--------------------------------------------------------------------------
        |
        | This item determines which server global should be used to retrieve the
        | URI string.  The default setting of 'AUTO' works for most servers.
        | If your links do not seem to work, try one of the other delicious flavors:
        |
        | 'AUTO'            Default - auto detects
        | 'PATH_INFO'       Uses the PATH_INFO
        | 'QUERY_STRING'    Uses the QUERY_STRING
        | 'REQUEST_URI'     Uses the REQUEST_URI
        | 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
        |
        */
        $config['uri_protocol'] = 'AUTO';

        /*
        |--------------------------------------------------------------------------
        | URL suffix
        |--------------------------------------------------------------------------
        |
        | This option allows you to add a suffix to all URLs generated by CodeIgniter.
        | For more information please see the user guide:
        |
        | http://codeigniter.com/user_guide/general/urls.html
        */

        $config['url_suffix'] = '';

        /*
        |--------------------------------------------------------------------------
        | Default Language
        |--------------------------------------------------------------------------
        |
        | This determines which set of language files should be used. Make sure
        | there is an available translation if you intend to use something other
        | than english.
        |
        */
        $config['language'] = 'english';

        /*
        |--------------------------------------------------------------------------
        | Default Character Set
        |--------------------------------------------------------------------------
        |
        | This determines which character set is used by default in various methods
        | that require a character set to be provided.
        |
        */
        $config['charset'] = 'UTF-8';

        /*
        |--------------------------------------------------------------------------
        | Enable/Disable System Hooks
        |--------------------------------------------------------------------------
        |
        | If you would like to use the 'hooks' feature you must enable it by
        | setting this variable to TRUE (boolean).  See the user guide for details.
        |
        */
        $config['enable_hooks'] = FALSE;


        /*
        |--------------------------------------------------------------------------
        | Class Extension Prefix
        |--------------------------------------------------------------------------
        |
        | This item allows you to set the filename/classname prefix when extending
        | native libraries.  For more information please see the user guide:
        |
        | http://codeigniter.com/user_guide/general/core_classes.html
        | http://codeigniter.com/user_guide/general/creating_libraries.html
        |
        */
        $config['subclass_prefix'] = 'MY_';


        /*
        |--------------------------------------------------------------------------
        | Allowed URL Characters
        |--------------------------------------------------------------------------
        |
        | This lets you specify with a regular expression which characters are permitted
        | within your URLs.  When someone tries to submit a URL with disallowed
        | characters they will get a warning message.
        |
        | As a security measure you are STRONGLY encouraged to restrict URLs to
        | as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
        |
        | Leave blank to allow all characters -- but only if you are insane.
        |
        | DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
        |
        */
        $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';


        /*
        |--------------------------------------------------------------------------
        | Enable Query Strings
        |--------------------------------------------------------------------------
        |
        | By default CodeIgniter uses search-engine friendly segment based URLs:
        | example.com/who/what/where/
        |
        | By default CodeIgniter enables access to the $_GET array.  If for some
        | reason you would like to disable it, set 'allow_get_array' to FALSE.
        |
        | You can optionally enable standard query string based URLs:
        | example.com?who=me&what=something&where=here
        |
        | Options are: TRUE or FALSE (boolean)
        |
        | The other items let you set the query string 'words' that will
        | invoke your controllers and its functions:
        | example.com/index.php?c=controller&m=function
        |
        | Please note that some of the helpers won't work as expected when
        | this feature is enabled, since CodeIgniter is designed primarily to
        | use segment based URLs.
        |
        */
        $config['allow_get_array']      = TRUE;
        $config['enable_query_strings'] = FALSE;
        $config['controller_trigger']   = 'c';
        $config['function_trigger']     = 'm';
        $config['directory_trigger']    = 'd'; // experimental not currently in use

        /*
        |--------------------------------------------------------------------------
        | Error Logging Threshold
        |--------------------------------------------------------------------------
        |
        | If you have enabled error logging, you can set an error threshold to
        | determine what gets logged. Threshold options are:
        | You can enable error logging by setting a threshold over zero. The
        | threshold determines what gets logged. Threshold options are:
        |
        |   0 = Disables logging, Error logging TURNED OFF
        |   1 = Error Messages (including PHP errors)
        |   2 = Debug Messages
        |   3 = Informational Messages
        |   4 = All Messages
        |
        | For a live site you'll usually only enable Errors (1) to be logged otherwise
        | your log files will fill up very fast.
        |
        */
        $config['log_threshold'] = 0;

        /*
        |--------------------------------------------------------------------------
        | Error Logging Directory Path
        |--------------------------------------------------------------------------
        |
        | Leave this BLANK unless you would like to set something other than the default
        | application/logs/ folder. Use a full server path with trailing slash.
        |
        */
        $config['log_path'] = '';

        /*
        |--------------------------------------------------------------------------
        | Date Format for Logs
        |--------------------------------------------------------------------------
        |
        | Each item that is logged has an associated date. You can use PHP date
        | codes to set your own date formatting
        |
        */
        $config['log_date_format'] = 'Y-m-d H:i:s';

        /*
        |--------------------------------------------------------------------------
        | Cache Directory Path
        |--------------------------------------------------------------------------
        |
        | Leave this BLANK unless you would like to set something other than the default
        | system/cache/ folder.  Use a full server path with trailing slash.
        |
        */
        $config['cache_path'] = '';

        /*
        |--------------------------------------------------------------------------
        | Encryption Key
        |--------------------------------------------------------------------------
        |
        | If you use the Encryption class or the Session class you
        | MUST set an encryption key.  See the user guide for info.
        |
        */
        $config['encryption_key'] = 'You're not allowed to see this';

        /*
        |--------------------------------------------------------------------------
        | Session Variables
        |--------------------------------------------------------------------------
        |
        | 'sess_cookie_name'        = the name you want for the cookie
        | 'sess_expiration'         = the number of SECONDS you want the session to last.
        |   by default sessions last 7200 seconds (two hours).  Set to zero for no expiration.
        | 'sess_expire_on_close'    = Whether to cause the session to expire automatically
        |   when the browser window is closed
        | 'sess_encrypt_cookie'     = Whether to encrypt the cookie
        | 'sess_use_database'       = Whether to save the session data to a database
        | 'sess_table_name'         = The name of the session database table
        | 'sess_match_ip'           = Whether to match the user's IP address when reading the session data
        | 'sess_match_useragent'    = Whether to match the User Agent when reading the session data
        | 'sess_time_to_update'     = how many seconds between CI refreshing Session Information
        |
        */
        $config['sess_cookie_name']     = 'ci_session';
        $config['sess_expiration']      = 7200;
        $config['sess_expire_on_close'] = FALSE;
        $config['sess_encrypt_cookie']  = FALSE;
        $config['sess_use_database']    = FALSE;
        $config['sess_table_name']        = 'ci_sessions';
        $config['sess_match_ip']        = FALSE;
        $config['sess_match_useragent'] = TRUE;
        $config['sess_time_to_update']  = 300;

        /*
        |--------------------------------------------------------------------------
        | Cookie Related Variables
        |--------------------------------------------------------------------------
        |
        | 'cookie_prefix' = Set a prefix if you need to avoid collisions
        | 'cookie_domain' = Set to .your-domain.com for site-wide cookies
        | 'cookie_path'   =  Typically will be a forward slash
        | 'cookie_secure' =  Cookies will only be set if a secure HTTPS connection exists.
        |
        */
        $config['cookie_prefix']    = "";
        $config['cookie_domain']    = "";
        $config['cookie_path']      = "/";
        $config['cookie_secure']    = FALSE;

        /*
        |--------------------------------------------------------------------------
        | Global XSS Filtering
        |--------------------------------------------------------------------------
        |
        | Determines whether the XSS filter is always active when GET, POST or
        | COOKIE data is encountered
        |
        */
        $config['global_xss_filtering'] = FALSE;

        /*
        |--------------------------------------------------------------------------
        | Cross Site Request Forgery
        |--------------------------------------------------------------------------
        | Enables a CSRF cookie token to be set. When set to TRUE, token will be
        | checked on a submitted form. If you are accepting user data, it is strongly
        | recommended CSRF protection be enabled.
        |
        | 'csrf_token_name' = The token name
        | 'csrf_cookie_name' = The cookie name
        | 'csrf_expire' = The number in seconds the token should expire.
        */
        $config['csrf_protection'] = FALSE;
        $config['csrf_token_name'] = 'csrf_test_name';
        $config['csrf_cookie_name'] = 'csrf_cookie_name';
        $config['csrf_expire'] = 7200;

        /*
        |--------------------------------------------------------------------------
        | Output Compression
        |--------------------------------------------------------------------------
        |
        | Enables Gzip output compression for faster page loads.  When enabled,
        | the output class will test whether your server supports Gzip.
        | Even if it does, however, not all browsers support compression
        | so enable only if you are reasonably sure your visitors can handle it.
        |
        | VERY IMPORTANT:  If you are getting a blank page when compression is enabled it
        | means you are prematurely outputting something to your browser. It could
        | even be a line of whitespace at the end of one of your scripts.  For
        | compression to work, nothing can be sent before the output buffer is called
        | by the output class.  Do not 'echo' any values with compression enabled.
        |
        */
        $config['compress_output'] = FALSE;

        /*
        |--------------------------------------------------------------------------
        | Master Time Reference
        |--------------------------------------------------------------------------
        |
        | Options are 'local' or 'gmt'.  This pref tells the system whether to use
        | your server's local time as the master 'now' reference, or convert it to
        | GMT.  See the 'date helper' page of the user guide for information
        | regarding date handling.
        |
        */
        $config['time_reference'] = 'local';


        /*
        |--------------------------------------------------------------------------
        | Rewrite PHP Short Tags
        |--------------------------------------------------------------------------
        |
        | If your PHP installation does not have short tag support enabled CI
        | can rewrite the tags on-the-fly, enabling you to utilize that syntax
        | in your view files.  Options are TRUE or FALSE (boolean)
        |
        */
        $config['rewrite_short_tags'] = FALSE;


        /*
        |--------------------------------------------------------------------------
        | Reverse Proxy IPs
        |--------------------------------------------------------------------------
        |
        | If your server is behind a reverse proxy, you must whitelist the proxy IP
        | addresses from which CodeIgniter should trust the HTTP_X_FORWARDED_FOR
        | header in order to properly identify the visitor's IP address.
        | Comma-delimited, e.g. '10.0.1.200,10.0.1.201'
        |
        */
        $config['proxy_ips'] = '';


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

您的会话必须从第一个php文件的第一行开始,例如,您必须在第一个文件中将此文件包含到另一个文件中

通常在index.php中

<?php
session_start();//always on the first line of the file after opening the <?php also before any html code

public function submit() 
{
$this->load->helper(array('form'));
// authenticate
$username = $this->input->post('txtLogin');
$password = $this->input->post('txtPassword');

//query the database
$result = $this->user->login($username, $password);

if($result)
{

   $sess_array = array();
   foreach($result as $row)
   {
       $sess_array = array(
       'id' => $row->GebruikerID,
       'username' => $row->Email
       );
       $this->session->set_userdata('logged_in', $sess_array);

       redirect('dashboard');
   }

您的会话必须从第一个php文件的第一行开始,例如,您必须在第一个文件中将此文件包含到另一个文件中

通常在index.php中

<?php
session_start();//always on the first line of the file after opening the <?php also before any html code

public function submit() 
{
$this->load->helper(array('form'));
// authenticate
$username = $this->input->post('txtLogin');
$password = $this->input->post('txtPassword');

//query the database
$result = $this->user->login($username, $password);

if($result)
{

   $sess_array = array();
   foreach($result as $row)
   {
       $sess_array = array(
       'id' => $row->GebruikerID,
       'username' => $row->Email
       );
       $this->session->set_userdata('logged_in', $sess_array);

       redirect('dashboard');
   }

从代码中删除会话\u start()。CodeIgniter将处理会话初始化。

因为CodeIgniter使用命名会话,所以使用PHP本机会话时需要首先指定它:

session_name('ci_session');
session_start();
但你不应该这么做。CodeIgniter充当本机PHP和CodeIgniter会话(尤其是与数据库一起使用时)之间的接口的全部原因。您不应该一开始就使用PHP会话方法


实际上,通过运行
session\u start()
,您可能正在从CodeIgniter会话切换到PHP本机会话,但您仍在使用CodeIgniter会话调用,因此不会将任何内容保存到您正在使用的PHP会话中。

从代码中删除session\u start()。CodeIgniter将处理会话初始化。

因为CodeIgniter使用命名会话,所以使用PHP本机会话时需要首先指定它:

session_name('ci_session');
session_start();
但你不应该这么做。CodeIgniter充当本机PHP和CodeIgniter会话(尤其是与数据库一起使用时)之间的接口的全部原因。您不应该一开始就使用PHP会话方法

实际上,通过运行
session_start()
,您可能正在从CodeIgniter会话切换到PHP本机会话,但您仍然在使用CodeIgniter会话调用,因此不会将任何内容保存到正在使用的PHP会话中。

删除
session_start()从任何地方

打开autoload.php并设置:

$autoload['libraries']=array('session','encryption')

然后打开config.php并设置:

$config['encryption_key']='your key here'

然后尝试按如下方式设置会话:

 $session_user = array(
    'id' => $row->GebruikerID,
    'username' => $row->Email
     );
   $this->session->set_userdata($session_user);
然后像这样转储:

$this->session->userdata('id');
$this->session->userdata('username');
print\r($this->session->userdata('id'))

print\r($this->session->userdata('username'))

尝试此操作并检查是否执行此操作

删除
会话_start()从任何地方

打开autoload.php并设置:

$autoload['libraries']=array('session','encryption')

然后打开config.php并设置:

$config['encryption_key']='your key here'

然后尝试按如下方式设置会话:

 $session_user = array(
    'id' => $row->GebruikerID,
    'username' => $row->Email
     );
   $this->session->set_userdata($session_user);
然后像这样转储:

$this->session->userdata('id');
$this->session->userdata('username');
print\r($this->session->userdata('id'))

print\r($this->session->userdata('username'))


试试这个,检查一下这项工作与否

我发现两个问题。首先,将会话数据设置为错误():

更改此项:

$this->session->set_userdata('logged_in', $sess_array);
为此:

$this->session->set_userdata($sess_array);
然后像这样读取会话数据:

$this->session->userdata('id');
$this->session->userdata('username');

祝你好运

我看到两个问题。首先,将会话数据设置为错误():

更改此项:

$this->session->set_userdata('logged_in', $sess_array);
为此:

$this->session->set_userdata($sess_array);
然后像这样读取会话数据:

$this->session->userdata('id');
$this->session->userdata('username');


祝你好运

请附加您的
config.php
文件内容。您是否首先加载了会话库?通过
$this->load->library('session')?或者在
autoload.php
中添加该代码?该代码是在控制器中还是在视图中?如果是其中一个,您无需使用
session\u start
,PHP将为您处理会话初始化。请附加
config.PHP
文件内容。您是否首先加载了会话库?通过
$this->load->library('session')?或者在
autoload.php
中添加该代码?该代码是在控制器中还是在视图中?如果在其中一种情况下,您无需使用
session\u start
,PHP将为您处理会话初始化。对不起,您真的读过我的帖子了吗?我说得很清楚,我已经试过了。无论如何谢谢你对不起,你真的读过我的帖子吗?我说得很清楚,我已经试过了。无论如何谢谢你蒂姆:我每一页都这样做吗?或者就在我宣布会议的地方?谢谢-TimCodeIgniter有自己的会话处理程序,它不使用PHP本机会话。@HashemQolami在您发表评论的第二次添加了一个指向会话类的链接。凉的请阅读我在答案中添加的解释。是的,您必须在访问$\会话数组的每一页上使用会话\名称。我是否在每一页上都这样做?或者就在我宣布会议的地方?谢谢-TimCodeIgniter有自己的会话处理程序,它不使用PHP本机会话。@HashemQolami在您发表评论的第二次添加了一个指向会话类的链接。凉的请阅读我在答案中添加的解释。是的,您必须在访问$会话数组的每个页面上使用会话名称。我完全错过了这个!无论是这个答案还是我的答案都可能是OP问题的解决方案,+1。这是我的问题。我不敢相信我弄错了。非常感谢蒂米完全错过了这个!无论是这个答案还是我的答案都可能是OP问题的解决方案,+1。这是我的问题。我不敢相信我弄错了。非常感谢蒂莫普说他/她一直在