Asked by:
Wincache 1.1.x file backed sessions not saving

Question
-
User-668283964 posted
I'm having this problem both in development and production. I recently moved to using Wincache as my session handler. It works very well, until the app pool resets and all the sessions are lost. It doesn't appear to be writing out session files and I can't seem to make it work in any of my environments.
session.save_path = "d:\inetpub\php_sessions"
If I comment out session.save_handler = wincache in the ini file, and use the default, session files appear in the save_path. Uncomment save_handler (so wincache is the handler), and session files stop being created. It seems permissions on the save_path are fine, or files wouldn't be written by the default handler.
Ok, gory detail time:
Development environment:
Windows 7 x64
IIS 7
PHP 5.3.3 nts VC9 x86 under fastcgi
WinCache 1.1.630.0, 6/29/2010 10:57am (from file properties), phpinfo shows 1.1.0630.0, Jun 29 2010 10:57:43, not sure why the discrepancy
Production environment:
Windows Server 2008 R2 x64
IIS 7.5
PHP 5.3.3 nts VC9 x86 under fastcgi
WinCache 1.1.630.0, 6/29/2010 10:57am (from file properties), phpinfo shows 1.1.0630.0, Jun 29 2010 10:57:43
App pool is running under NETWORK SERVICE on both machines. Session directory has read/write permissions for NETWORK SERVICE, IUSR, IIS_IUSER (overly broad, I know).
PHP.ini settings (identical on both machines)
Directive Local Value session.auto_start Off session.bug_compat_42 Off session.bug_compat_warn Off session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_httponly Off session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value session.entropy_length 0 session.gc_divisor 1000 session.gc_maxlifetime 1440 session.gc_probability 1 session.hash_bits_per_character 5 session.hash_function 0 session.name PHPSESSID session.referer_check no value session.save_handler wincache session.save_path d:\inetpub\php_sessions session.serialize_handler php session.use_cookies On session.use_only_cookies On session.use_trans_sid 0 wincache.chkinterval 30 wincache.debuglevel 0 wincache.enablecli Off wincache.fcachesize 24 wincache.fcenabled On wincache.fcenabledfilter no value wincache.fcndetect On wincache.filecount 4096 wincache.ignorelist wincache.php wincache.localheap 0 wincache.maxfilesize 256 wincache.namesalt no value wincache.ocachesize 96 wincache.ocenabled On wincache.ocenabledfilter no value wincache.scachesize 512 wincache.ttlmax 1200 wincache.ucachesize 512 wincache.ucenabled On Simple script I use for testing:
session_start();
$i = 0;
if (isset($_SESSION['myNum'])) $i = $_SESSION['myNum'];
echo "session_save_path: " . session_save_path();
echo "i: " . $i;
++$i;
$_SESSION['myNum'] = $i;
I run this repetitively, and see $i increment. I'll then recycle the app pool and watch it go to 0. Using the default session_handler, it works as expected across recycles.
As recommended on other posts, I've used procmon to watch php_cgi.exe during the process. Using the default session_handler, I see explicit calls to the save_path. Using WinCache, there is nothing.
No errors are reported by PHP, and the eventlogs are clear.
Any ideas on what might be going on?
Thanks
Seth
Friday, October 1, 2010 2:14 PM
All replies
-
User-1653247517 posted
Hi Seth.
I recently found a bug which is probably what is causing this. I have fixed the bug for WinCache 1.2 release. There is a possible workaround which will require you to change your application pool name. Would you be willing to do that? If yes, send me your application pool name and I can tell you what you can change it to workaround this bug.
Thanks,
KanwalFriday, October 1, 2010 3:40 PM -
User-2048372337 posted
Any chance this might fix my issue as well? :)
Friday, October 1, 2010 3:48 PM -
User-668283964 posted
Kanwal, thanks for your help. My app pool name is:
app.swis.org
Thanks
Seth
Friday, October 1, 2010 5:04 PM -
User-1653247517 posted
Seth, If you change apppool name to app_swis_org, you won't run into the bug. Can you give it a try?
Laurin1, doesn't seems like this bug would cause what you are seeing. I will need more info to debug your issue. I will follow up with you on the that forum thread.Friday, October 1, 2010 7:24 PM -
User-668283964 posted
Success! Thank-you Kanwal for your prompt help. I made the setting change last night and it fixed the problem. Sessions are now creating files and are successfully surviving app-pool recycles and iis restarts.
Just to recap, for anyone else who has the same or similar problems and stumble upon this thread:
Problem: WinCache 1.1 (IIS 7x, PHP 5.3), set as the PHP session handler, was not writing out session files (file backed sessions). This meant that php sessions worked fine until the app-pool was recycled, then all sessions would be lost.
Solution: My app-pools used the same name as my websites. My sites are the same as their domain name (i.e. www.somesite.com). This meant that my app-pool name had periods (.) in them. By changing the periods to underscores (_), the problem was mitigated. It is possible that there are other characters that cause problems as well, but the period was definitely the problem in my case. It sounds like this bug will be fixed in the v1.2 release of WinCache.
Solution Recap: app-pool named 'www.somesite.com' was renamed 'www_somesite_com' and the problem was mitigated.
Thanks
Seth
Monday, October 4, 2010 11:25 AM -
User-2048372337 posted
Nice catch guys.
Monday, October 4, 2010 12:01 PM -
User-525337081 posted
Thanks for this I was having the same issue as I name the app pools the same way.
Tuesday, October 19, 2010 8:46 AM