tags:

views:

22

answers:

2

Hello

I have a site I'm deploying and I've hit a problem. I was testing my code in a sub-directory of my clients hosting package and everything seemed fine. However I've moved the folders/files to the site root and now I'm intermittently losing all session data.

I've taken a look with LiveHeaders in Firefox and these cookies are being set:

    Cookie: __utma=196298984.443251570.1275554915.1275554915.1275557276.2;
 __utmz=196298984.1275554915.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);
 __utmb=196298984.188.10.1275557276; PHPSESSID=3f5a363de3b7ec6084c7fdf90bec78a8; 
__utmc=196298984 

and

    Cookie: __utma=196298984.443251570.1275554915.1275554915.1275557276.2; _utmz=196298984.1275554915.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); 
__utmb=196298984.189.10.1275557276; PHPSESSID=3f5a363de3b7ec6084c7fdf90bec78a8; 
__utmc=196298984

I'm by no means an expert on headers so if you need other information, I should be able to get it.

A: 

For a session to work, two elements have to both be working:

First, the browser must send the same PHPSESSID cookie with every request. The session ID will change from one session to another, so if you login tomorrow (or later today, or in a different browser, et cetera) you'll get a different ID than you have now, but during a single session the ID should not be changing.

Second, the server must be able to access the same files associated with that ID during every request. By default, PHP stores that information in the /tmp/ directory. If you have access, you could even poke around there and see what's getting stored.

The first issue is easiest to test for. Take a look at what cookies are being sent while the session is working, and then check again after the session stops working and see if the PHPSESSID has changed. The most likely cause for behavior like this would be a poorly set local computer clock, poor timeout settings on the session, et cetera.

The second issue is a bit trickier. If your browser is sending the right cookie with every request, but PHP can't access the file with information about that session, the problem is with the server. You might consider storing your sessions in a database (if you're using one anyway), which is easily done with code in the PHP manual.

VoteyDisciple
The PHPSESSID seems to be persisting even after I am locked out. (I hope I'm using the tool correctly)
YsoL8
For the second issue, do I take it that I would remove all references for $_session and replace them with MySQL alternatives?
YsoL8
Not at all. You'd use the `session_set_save_handler` function to tell PHP how and where to save session information. You'd do this once in your config file (or otherwise at the beginning of your script). The manual (in a comment) includes the code to set this up.
VoteyDisciple
A: 

A couple of things that come to my mind:

1 : Make sure that if your session is being created on www.abc.com, then all browsing happens on exactly that domain, if some pages are being sent to abc.com instead of www.abc.com, this is likely to cause session/cookie problems.

2 : also make sure that session_start instruction is available on top of ALL pages.

Sabeen Malik