I'm having some issues tonight. Today of course there was an announcement that CI version 3.1.3 was released. So, I ran my development builder for Community Auth, and can't log in. By default the builder sets me up with database sessions. Sometimes I am seeing this error message:
ERROR - 2017-01-09 19:55:20 --> Severity: Warning --> Unknown: Failed to write session data (user). Please verify that the current setting of session.save_path is correct (ci_sessions) Unknown 0
I can switch to file based sessions and everything starts working fine, but broken again if I switch back to database sessions.
Also, if I set up my builder to pull in CI 3.1.2 instead of 3.1.3, everything works fine with the database sessions. So, I'm not quite sure what to do to debug. It could be a session issue, or maybe a database issue, I don't really know.
If it matters, here is my builder script:
Code:
#!/bin/bash
# This is the installer for those working on Community Auth development.
# Place and execute this script where IT WILL CREATE the web root directory.
# It will also create the database, as long as you set a valid user and password.
# The directory that git will clone into
SITEDIR="community_auth_ci_3"
# The base_url for CodeIgniter
# Note: make sure to escape slashes!
BASEURL="http:\/\/localhost.community_auth_ci_3\/"
# The name of the database to create
DBNAME="community_auth_ci_3"
# The DB user
DBUSER="root"
# The DB password
DBPASS=""
# If symlinks (soft links) should be used instead of copying files
SYMLINKS=false
# The CI download
CIDOWNLOAD="https://github.com/bcit-ci/CodeIgniter/archive/master.tar.gz"
# CIDOWNLOAD="https://github.com/bcit-ci/CodeIgniter/archive/3.1.2.tar.gz"
# -------------------------------------------------------------------------
# Make sure not already installed
if [ ! -d ./$SITEDIR ];
then
# Clone the Community Auth repository on bitbucket
git clone [email protected]:skunkbad/community-auth-for-codeigniter-3.git $SITEDIR
# The web root directory should now exist
if [ -d ./$SITEDIR ];
then
# Move into web root
cd ./$SITEDIR
# Temporarily move Community Auth
mv ./application/third_party/community_auth/ ./community_auth_tmp/
rm -r ./application
# Temp file deleted after extract
TMPFILE=`mktemp`
# Download and extract CodeIgniter (skip old files so .gitignore is not replaced)
wget $CIDOWNLOAD -O $TMPFILE
tar -xf $TMPFILE --skip-old-files --strip 1
rm $TMPFILE
# Restore Community Auth to its third party location
mv ./community_auth_tmp/ ./application/third_party/community_auth/
# Move into application directory
cd ./application
# Copy or symlink core files
if [ "$SYMLINKS" = true ];
then
ln -s ../third_party/community_auth/core/MY_Controller.php ./core/MY_Controller.php
ln -s ../third_party/community_auth/core/MY_Input.php ./core/MY_Input.php
ln -s ../third_party/community_auth/core/MY_Model.php ./core/MY_Model.php
else
cp ./third_party/community_auth/core/MY_Controller.php ./core/MY_Controller.php
cp ./third_party/community_auth/core/MY_Input.php ./core/MY_Input.php
cp ./third_party/community_auth/core/MY_Model.php ./core/MY_Model.php
fi
# Copy or symlink hook files
if [ "$SYMLINKS" = true ];
then
ln -s ../third_party/community_auth/hooks/auth_constants.php ./hooks/auth_constants.php
ln -s ../third_party/community_auth/hooks/auth_sess_check.php ./hooks/auth_sess_check.php
else
cp ./third_party/community_auth/hooks/auth_constants.php ./hooks/auth_constants.php
cp ./third_party/community_auth/hooks/auth_sess_check.php ./hooks/auth_sess_check.php
fi
# Copy or symlink controller files
if [ "$SYMLINKS" = true ];
then
ln -s ../third_party/community_auth/controllers/Examples.php ./controllers/Examples.php
ln -s ../third_party/community_auth/controllers/Key_creator.php ./controllers/Key_creator.php
else
cp ./third_party/community_auth/controllers/Examples.php ./controllers/Examples.php
cp ./third_party/community_auth/controllers/Key_creator.php ./controllers/Key_creator.php
fi
# Copy or modify main .htaccess
cp ./third_party/community_auth/public_root/.htaccess ./../.htaccess
# Add autoload configuration
sed -i "s/\['packages'\] = array()/\['packages'\] = array(\n\tAPPPATH . 'third_party\/community_auth\/'\n)/g; \
s/\['libraries'\] = array()/\['libraries'\] = array(\n\t'database','session','tokens','Authentication'\n)/g; \
s/\['helper'\] = array()/\['helper'\] = array(\n\t'serialization','cookie'\n)/g; \
s/\['config'\] = array()/\['config'\] = array(\n\t'db_tables','authentication'\n)/g; \
s/\['model'\] = array()/\['model'\] = array(\n\t'auth_model'\n)/g;" ./config/autoload.php
# Add route to login page
echo "\$route[LOGIN_PAGE] = 'examples/login';" >> ./config/routes.php
# Change home page to examples/home
sed -i "s/\['default_controller'\] = 'welcome'/\['default_controller'\] = 'examples\/home'/g" ./config/routes.php
# Set base_url, index_page, turn hooks on, add an encryption key, and configure sessions
sed -i "s/\['base_url'\] = ''/\['base_url'\] = '$BASEURL'/g; \
s/\['index_page'\] = 'index.php'/\['index_page'\] = ''/g; \
s/\['enable_hooks'\] = FALSE/\['enable_hooks'\] = TRUE/g; \
s/\['encryption_key'\] = ''/\['encryption_key'\] = hex2bin('5d3a06b1a1efeb861ad761fb8839794f')/g; \
s/\['sess_driver'\] = 'files'/\['sess_driver'\] = 'database'/g; \
s/\['sess_cookie_name'\] = 'ci_session'/\['sess_cookie_name'\] = 'ciSess'/g; \
s/\['sess_save_path'\] = NULL/\['sess_save_path'\] = 'ci_sessions'/g; \
s/\['sess_regenerate_destroy'\] = FALSE/\['sess_regenerate_destroy'\] = TRUE/g;" ./config/config.php
# Add hooks
printf "\$hook['pre_system'] = array(\n\t'function' => 'auth_constants',\n\t'filename' => 'auth_constants.php',\n\t'filepath' => 'hooks'\n);\n\$hook['post_system'] = array(\n\t'function' => 'auth_sess_check',\n\t'filename' => 'auth_sess_check.php',\n\t'filepath' => 'hooks'\n);" >> ./config/hooks.php
# Create DB
if [ -n "$DBPASS" ];
then
mysqladmin -u $DBUSER -p$DBPASS create $DBNAME
cat ./third_party/community_auth/sql/install.sql | mysql -u $DBUSER -p$DBPASS $DBNAME
else
mysqladmin -u $DBUSER create $DBNAME
cat ./third_party/community_auth/sql/install.sql | mysql -u $DBUSER $DBNAME
fi
# Configure DB
if [ -n "$DBPASS" ];
then
sed -i "s/'username' => ''/'username' => '$DBUSER'/g; \
s/'password' => ''/'password' => '$DBPASS'/g; \
s/'database' => ''/'database' => '$DBNAME'/g;" ./config/database.php
else
sed -i "s/'username' => ''/'username' => '$DBUSER'/g; \
s/'database' => ''/'database' => '$DBNAME'/g;" ./config/database.php
fi
# Pretty URLs
printf "\n\nRewriteEngine On\nRewriteBase /\n\nRewriteRule ^(system|application|cgi-bin) - [F,L]\nRewriteCond %%{REQUEST_FILENAME} !-f\nRewriteCond %%{REQUEST_FILENAME} !-d\nRewriteRule .* index.php/\$0 [PT,L]" >> ./../.htaccess
# Checkout develop from origin
git checkout -b develop origin/develop
# Success
echo "REMOVE INSTALLER SCRIPT (THIS FILE)."
else
# Error
echo "INSTALLER ERROR: COMMUNITY AUTH DIR DOES NOT EXIST."
fi
else
# Error
echo "INSTALLER ERROR: COMMUNITY AUTH DIR ALREADY EXISTS."
fi
Session config is what I always use:
PHP Code:
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ciSess';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = TRUE;
Same with DB config:
PHP Code:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'community_auth_ci_3',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
With sess_match_ip set to FALSE, here is my table:
Code:
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
PRIMARY KEY (`id`),
KEY `ci_sessions_timestamp` (`timestamp`)
) ENGINE = MyISAM DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
Anything to know about 3.1.3? This is just a standard issue Ubuntu 14.04 box. PHP 5.5. MariaDB 10.1.20.