views:

249

answers:

6

Hi guys, I have read through the php manual for this problem and it seems quite a common issue but i have yet to find a solution. I am saving sessions in a database. My code is as follows:

// session
$_SESSION['userID'] = $user->id;        
header('Location: /subdirectory/index.php');

Then at the top of index.php after the session_start(), i have var_dumped the $_SESSION global and the userID is not in there. As i said ive looked through the PHP manual (http://php.net/manual/en/function.session-write-close.php) and neither session_write_close or session_regenerate_id(true) worked for me. Does anybody know a solution?

Edit: I have session_start() at the top of my file. When i var_dump the session global before the header redirect, i see the userID in there, but not in the other file, which is in a subdirectory of this script

Thanks, Matt

A: 

Have you got an session_start(); on the top?

Not tested but cant you do something like this:

session_start();
$_SESSION['userID'] = $user->id;
if( $_SESSION['userID'] == $user->id )
{  
    header('Location: /index.php');
}

I never have this Problem before, interesting

ahmet2106
Yes, i do. When i var_dump the session global before the header redirect, its in there, just isnt when i go to a new file in a sub folder of the original script
phpNutt
@Matt funny, but its really interesting, because there should be set the Session, maybe any other code is deleting your session, are u sure nowhere else is a session_destroy(); ?
ahmet2106
@ahmet2106 - Strange, i changed $_SESSION['userID'] to $_SESSION['uid'] and it worked as expected. I dont know why the two capital letters make a difference. I tried it with userId aswell and that was fine too. Any ideas as to why it wouldnt accept userID? with two capitals, im baffled
phpNutt
A: 

userID does not have any keyword status.

Only reason to me, is $_SESSION['userID'] is being overwritten or deleted somewhere.

Make sure you use session->start() in all the files you want to add/access the session.

One important thing ( which may not be applicable in your case ) is, if the session is being handled using cookie, cookie can be made to be accessible only under certain directory and subdirectories under that. In your case anyhow, subdirectory will have access to the session.

Lionheart
A: 

Try to give session_name() before you session_start() And switch error_reporting(15) to see errors.

GOsha
+1  A: 

@Matt (not able to comment yet...): If:
a) It appears in the session before redirect
b) other keys work

80% of the time the problem is register_globals, and use of a equally named variable $userID somewhere (the other 19% is just overwriting in places one doesn't expect, 1% is unable to write/lock session before redirect and stale data, in which case you could try session_write_close() before the redirect). It goes without saying register_globals should be off :P

Wrikken
A: 

Make sure both pages are the same php version (php5, php4 sometimes have different session paths)

Harry
A: 

I haven't heard of this issue, but I haven't used sessions all that much.

With sessions you MUST do a few things and have a few setting setup:

  • cookies enabled on client side
  • session_start(), before anything happens
  • make sure you don't destroy the session(unless they want to logout)
  • The PHP session id must be the same (relates to cookies)

Another issue could be the $user->id is returning a reference to an object that doesn't exist on the next page. Most likely not, but make sure.

If I saw your code I could help you a lot more. But when debugging check the session key with session_id() and make sure it's the same. If you could try that then tell me I could keep helping.

I too would like to know how this ends up for when I get back into sessions.

Michael Ozeryansky