CI : Странен проблем със сесиите.

index

Super Moderator
Здрасти, близо 1 час се блещя , логически всичко е правилно. До скоро си работеше без проблеми, качил съм файловете в готовите кодове ....

Та сега нямаше какво да правя и реших да работя по-едно един проект. При което почна да ми вади следната грешка :
http://i39.tinypic.com/ip9yrs.png

Реших да сваля на ново версията на CI : 2.1.0, и пак същото. Някакви идеи от къде и какво да почна да преглеждам? Просто няма логично обяснение , днеска работи перфекте , утре цепи това ....
 
Та при CI си има такива проблеми. Препоръчвам ти да си провериш config файла, защото на мен до скоро ми правеше проблеми, защото бях сложил Cookie_Secure = True. Така, че това може да е проблемът или си прегледай пак, но според мен най - вероятно проблемът да е там.
 
Отвори си Session.php и си виж функцията с която слагаш хедър информацията. Виж си функцията за инициализиране на сесията. Примерно имаш това

Код:
Function init() {
           session_start();
}

сложи едно @ отпред и всичко ще е ок.
 
И с TRUE и с FALSE пак същото :
PHP:
<?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'] = 'page.pbp';

/*
|--------------------------------------------------------------------------
| 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'] =  TRUE;
$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'] = 1;

/*
|--------------------------------------------------------------------------
| 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'] = 'GolqmaTypotiq';

/*
|--------------------------------------------------------------------------
| 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']		= 'session';
$config['sess_expiration']		= 7200;
$config['sess_expire_on_close']	= TRUE;
$config['sess_encrypt_cookie']	= TRUE;
$config['sess_use_database']	= TRUE;
$config['sess_table_name']		= 'sessions';
$config['sess_match_ip']		= TRUE;
$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'] = TRUE;

/*
|--------------------------------------------------------------------------
| 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'] = TRUE;

/*
|--------------------------------------------------------------------------
| 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'] = TRUE;


/*
|--------------------------------------------------------------------------
| 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 */
Също и забелязвам, че дори и да трещи това, създава нужната информация ( [loged] => 1 [username] => admin [id] => 1 ) обаче я има само в логин страницата , не и в другите WTF ! ! !
 
Щом я създава би трябвало да я има на всички страници, освен ако не я унищожаваш някъде. Как извикваш информацията?
PHP:
$this->session->userdata('името');
По този начин ли?
 
Radko каза:
Отвори си Session.php и си виж функцията с която слагаш хедър информацията. Виж си функцията за инициализиране на сесията. Примерно имаш това

Код:
Function init() {
           session_start();
}

сложи едно @ отпред и всичко ще е ок.
Такова няма в файла.
Лесно мога да сложа по една кломба. Идеята мие да разбера защо, чак сега започна да ги дава тези проблеми и да ги премахна. Не искам да прикривам проблема, а да го реша :)))))
 
да не би да извикваш нещо с echo или подобни в controller-a или пък извикваш view-та преди да си обработил сесиите.
 
PHP:
<?php

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

class Users extends CI_Controller {

    var $homeurl;

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

        $this->homeurl = base_url();
    }

    function index() {
        echo " <p><a href='{$this->homeurl}/Users/register'>Register</a></p>";
        echo " <p><a href='{$this->homeurl}/Users/login'>Login</a></p>";
        print_r($this->session->all_userdata());
    }

    function register() {

        $this->form_validation->set_rules('username', 'Username', 'required|alpha_numeric|min_length[6]|max_length[32]|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'required|alpha_numeric|min_length[6]|max_length[32]|xss_clean|md5');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|min_length[10]|max_length[255]|xss_clean|valid_email');

        if ($this->form_validation->run() == FALSE) {
            $this->load->view('/change_user/register_load');
            //bad
        } else {
            //okey

            $data['username'] = $this->input->post('username');
            $data['password'] = $this->input->post('password');
            $data['email'] = $this->input->post('email');
            $this->User_model->add($data['username'], $data['password'], $data['email']);
        }
    }

//register

    function login() {
        $this->form_validation->set_rules('username', 'Username', 'trim|required|alpha_numeric|min_length[3]|max_length[32]|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|alpha_numeric|min_length[6]|max_length[32]|xss_clean|md5');

        if ($this->form_validation->run() == FALSE) {
            $this->load->view('/change_user/login_view');
            //bad
        } else {
            //okey
            // $this->load->model('User_model');
            echo " okey  login ";
            $user_id = $this->User_model->lookingfor_user_login($this->input->post('username'), $this->input->post('password'));
            if ($user_id != false) {
                $session_data = array('loged' => true, 'username' => $this->input->post('username'), 'id' => $user_id);
                $this->session->set_userdata($session_data);

                echo "lognat<br/>";
                print_r($this->session->all_userdata());
            } else {
                echo "problem , opitaite pak sled malko ";
            }
        }
    }

//login

    function logout() {
        $this->session->sess_destroy();
        redirect(base_url('/Users/login'), 'refresh');
    }

//logout

    function change_pass() {
        $user_id = $this->session->userdata('id');
        if ($this->User_model->is_loged() != false) {
            $this->load->view('change_user/change_password'); // load view

            $this->form_validation->set_rules('old_password', 'Password', 'required|alpha_numeric|min_length[6]|max_length[32]|xss_clean|md5');
            $this->form_validation->set_rules('new_password', 'Password', 'required|alpha_numeric|min_length[6]|max_length[32]|xss_clean|md5');
            $this->form_validation->set_rules('new_password_again', 'Password', 'required|alpha_numeric|min_length[6]|max_length[32]|xss_clean|matches[new_password]|md5');
// set rules

            if ($this->form_validation->run() != FALSE) {

                $old_pass = $this->input->post('old_password');
                $new_pass = $this->input->post('new_password');
                $new_pass_again = $this->input->post('new_password');
                // get data from form
                if ($this->User_model->set_user_password($user_id, $old_pass, $new_pass)) {
                    echo "  fade ... okey  , changed  password ";
                } else {
                    echo " fade -  bad,  cant change it ";
                }
                //okey
            } else {
                echo " fail valid";
            }
        } else {
            redirect(base_url('/Users/login'), 'refresh');
        }
    }

//change pass

    function change_mail() {
        $user_id = $this->session->userdata('id');
        if ($this->User_model->is_loged() != false) {

            $mail_for_set = $this->User_model->get_user_data($user_id, 2); // get user mail

            $this->form_validation->set_rules('mail', 'Email', 'trim|required|min_length[10]|max_length[255]|xss_clean|valid_email');

            if ($this->form_validation->run() != FALSE) {
                $new_mail = $this->input->post('mail');
                if ($mail_for_set != $new_mail) {
                    $mail_for_set = $new_mail;
                    $this->User_model->set_user_data($user_id, $mail_for_set, 2);
                    echo " fade.... OKEY MSG";
                }
                //okey
            } else {
                
            }

            if ($mail_for_set != false) {
                $this->load->view('/change_user/change_mail', array('value_mail' => $mail_for_set));
            }
        } else {
            $this->load->view("fail_page");
        }
    }

//change mail

    function change_username() {
        $user_id = $this->session->userdata('id');
        if ($this->User_model->is_loged() != false) {

            $username_for_set = $this->User_model->get_user_data($user_id, 1); // get user mail

            $this->form_validation->set_rules('username', 'Username', 'required|alpha_numeric|min_length[6]|max_length[32]|xss_clean');

            if ($this->form_validation->run() != FALSE) {
                $new_username = $this->input->post('mail');
                if ($username_for_set != $new_username) {
                    $username_for_set = $new_username;
                    $this->User_model->set_user_data($user_id, $username_for_set, 1);
                    echo " fade.... OKEY MSG";
                }
                //okey
            } else {
                
            }

            if ($mail_for_set != false) {
                $this->load->view('/change_user/change_mail', array('value_mail' => $username_for_set));
            }
        } else {
            $this->load->view("fail_page");
        }
    }

//change username
}
 
Пробвай да премахнеш реда echo " okey login "; и echo "lognat<br/>";
или поне ги сложи поне под print_r($this->session->all_userdata());
 
nbacool2 каза:
Пробвай да премахнеш реда echo " okey login "; и echo "lognat<br/>";
или поне ги сложи поне под print_r($this->session->all_userdata());
Стана, записва сесията си правилно, поне за момента.Интересното ,че преди не даваше грешки....
Fatal error: ob_start() [<a href='ref.outcontrol'>ref.outcontrol</a>]: Cannot use output buffering in output buffering display handlers in D:\AppServ\www\webshop\system\core\Exceptions.php on line 181
В момента дава само тази грешка, и май ще я покрия.....


Благодаря за помощта :) +1
 

Горе