The problem...
I spent a sleepless night on this one, but finally figured it out...NOTE: This issue should only affect those on the GoDaddy Windows Hosting plan using PHP on IIS, but if I'm mistaken, please post your details and solution [if discovered] in the comments!)
I work on a PHP website that is in the process of being rewritten in ASP.NET MVC. Because of this, the site has been set up on GoDaddy on a Windows Hosting plan with PHP running under IIS. All was well through PHP versions 5.2.x and 5.3.x, but tonight needed to upgrade to 5.4 while we wait for the migration to be complete.
The site came up fine until I hit pages that required Session data. It seemed that Sessions stopped working with my existing code. After much troubleshooting, I discovered that the sessions were being written on the page setting the data, but when I hit another page that wanted to use said Session data, the Session was blank as if created new.
It turns out that there is a discrepancy on GoDaddy on the session.save_path used for PHP 5.2.x/5.3.x and PHP 5.4.x when hosted on the Windows hosting plan.
session.save_path comparison
PHP 5.2 and 5.3
session.save_path = C:\Windows\Temp\PHP 5.4
session.save_path = D:\Temp\php\session\
The solution...
Now, I don't know if the directory doesn't exist, or if there aren't proper permissions set on the directory, but for whatever reason, it doesn't like that path. After reverting back to 5.3.x and discovering the path difference, I re-upgraded to 5.4.x and forced the session.save_path to C:\Windows\Temp\ using a ".user.ini" file in the root of my site on GoDaddy.
What to do...
- Create/Edit ".user.ini" in the root of your site and make sure it has:
session.save_path='C:\Windows\Temp\' - GoDaddy Control Panel | IIS Management | Recycle App Pool
(This will ensure the PHP config overrides in ".user.ini" are loaded and used) - Enjoy access to $_SESSION again!
I hope this will save someone else a sleepless night.