Okay, so I built an app on our dev server, which is running PHP 5.4.16, and when IT set up a production server it was running PHP 7.2; now I’m sure I’m in for a steep learning curve and plenty of debugging, but this first one has been a real hair-jerker: After spending hours pouring over my code, throwing error_logs everywhere, and scouring the interwebz praying for a clue, I eventually came to the conclusion that apparently, something has changed between v5 and v7 in how PHP handles sessions. My theory appears to be validated by these two pages I threw together:
`//a.php
<?php
session_start();
$_SESSION[“test”] = “Testing sessions.”;
var_dump($
// b.php
<?php
session_start();
var_dump($_SESSION);`
The first one prints: array(1) { [“test”]=> string(17) “Testing sessions.” }
The second prints: array(0) { }
I’ve confirmed that the session settings (in php.ini) are the same on dev and production, and phpinfo() says sessions are enabled. So………..???????? while(true) { $frustration++; $hair–; } lol
Any ideas?
EDIT: After further struggleshooting, I also discovered that session_id is returning a different string for every page (even if i.e. refresh a.php a bunch of times). This makes about as much sense as multiplying 3.14159 * the square root of cheese, but whatever’s got PHP’s bits in a bunch, I’m sure someone somewhere understands it.
>@mfox#1627207 I also discovered that session_id is returning a different string for every page
session_start()
<i>
</i>echo "<pre>".print_r(session_get_cookie_params(), 1)."</pre>";
Array<br/>
(<br/>
[lifetime] => 0<br/>
[path] => /<br/>
[domain] => <br/>
[secure] => <br/>
[httponly] => <br/>
)
>@mfox#1627211 lifetime=0 is a bit of a red flag,
path
domain
yourdomain.com
www.yourdomain.com
domain
".yourdomain.com"
phpinfo()
<i>
</i><?php
phpinfo();
<i>
</i>$session_config = ini_get_all('session');
echo "<pre>".print_r($session_config, true)."</pre>";
nobody
apache
<i>
</i><?php
ini_set('display_errors', true); // turn off in production
error_reporting(E_ALL);
session_start();
// etc....
Array<br/>
(<br/>
[session.auto_start] => Array<br/>
(<br/>
[global_value] => 0<br/>
[local_value] => 0<br/>
[access] => 2<br/>
)
<i> </i><CODE>[session.cache_expire] => Array
<i> </i> (
<i> </i> [global_value] => 180
<i> </i> [local_value] => 180
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.cache_limiter] => Array
<i> </i> (
<i> </i> [global_value] => nocache
<i> </i> [local_value] => nocache
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.cookie_domain] => Array
<i> </i> (
<i> </i> [global_value] =>
<i> </i> [local_value] =>
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.cookie_httponly] => Array
<i> </i> (
<i> </i> [global_value] =>
<i> </i> [local_value] =>
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.cookie_lifetime] => Array
<i> </i> (
<i> </i> [global_value] => 0
<i> </i> [local_value] => 0
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.cookie_path] => Array
<i> </i> (
<i> </i> [global_value] => /
<i> </i> [local_value] => /
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.cookie_secure] => Array
<i> </i> (
<i> </i> [global_value] => 0
<i> </i> [local_value] => 0
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.gc_divisor] => Array
<i> </i> (
<i> </i> [global_value] => 1000
<i> </i> [local_value] => 1000
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.gc_maxlifetime] => Array
<i> </i> (
<i> </i> [global_value] => 1440
<i> </i> [local_value] => 1440
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.gc_probability] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.lazy_write] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.name] => Array
<i> </i> (
<i> </i> [global_value] => MyAppName
<i> </i> [local_value] => MyAppName
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.referer_check] => Array
<i> </i> (
<i> </i> [global_value] =>
<i> </i> [local_value] =>
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.save_handler] => Array
<i> </i> (
<i> </i> [global_value] => files
<i> </i> [local_value] => files
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.save_path] => Array
<i> </i> (
<i> </i> [global_value] =>
<i> </i> [local_value] => /var/lib/php/session
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.serialize_handler] => Array
<i> </i> (
<i> </i> [global_value] => php
<i> </i> [local_value] => php
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.sid_bits_per_character] => Array
<i> </i> (
<i> </i> [global_value] => 5
<i> </i> [local_value] => 5
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.sid_length] => Array
<i> </i> (
<i> </i> [global_value] => 26
<i> </i> [local_value] => 26
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.upload_progress.cleanup] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 2
<i> </i> )
<i> </i>[session.upload_progress.enabled] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 2
<i> </i> )
<i> </i>[session.upload_progress.freq] => Array
<i> </i> (
<i> </i> [global_value] => 1%
<i> </i> [local_value] => 1%
<i> </i> [access] => 2
<i> </i> )
<i> </i>[session.upload_progress.min_freq] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 2
<i> </i> )
<i> </i>[session.upload_progress.name] => Array
<i> </i> (
<i> </i> [global_value] => PHP_SESSION_UPLOAD_PROGRESS
<i> </i> [local_value] => PHP_SESSION_UPLOAD_PROGRESS
<i> </i> [access] => 2
<i> </i> )
<i> </i>[session.upload_progress.prefix] => Array
<i> </i> (
<i> </i> [global_value] => upload_progress_
<i> </i> [local_value] => upload_progress_
<i> </i> [access] => 2
<i> </i> )
<i> </i>[session.use_cookies] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.use_only_cookies] => Array
<i> </i> (
<i> </i> [global_value] => 1
<i> </i> [local_value] => 1
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.use_strict_mode] => Array
<i> </i> (
<i> </i> [global_value] => 0
<i> </i> [local_value] => 0
<i> </i> [access] => 7
<i> </i> )
<i> </i>[session.use_trans_sid] => Array
<i> </i> (
<i> </i> [global_value] => 0
<i> </i> [local_value] => 0
<i> </i> [access] => 7
<i> </i> )</CODE>
)<br/>
<i>
</i>[session.save_path] => Array
(
[global_value] =>
[local_value] => /var/lib/php/session
[access] => 7
)
global_value
local_value
.htaccess
httpd.conf
ini_get_all()
<i>
</i>Constant Value Meaning
PHP_INI_USER 1 Entry can be set in user scripts
PHP_INI_PERDIR 2 Entry can be set in php.ini, .htaccess or httpd.conf
PHP_INI_SYSTEM 4 Entry can be set in php.ini or httpd.conf
PHP_INI_ALL 7 Entry can be set anywhere
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header edit Set-Cookie ^(.*)$ $1;HttpOnly
0.1.9 β BETA 4.26