ID: 14636 Updated by: [EMAIL PROTECTED] -Reported By: [EMAIL PROTECTED] +Reported By: [EMAIL PROTECTED] Status: Assigned Bug Type: Session related Operating System: windows 2000 professional PHP Version: 4.0.6 Assigned To: yohgaki New Comment:
This is actually not a bug at all but rather behavior of HTTP. For PHP to be able to "find" a previously set session variable, it must be able to identify the client, right? Well, the default method used to accomplish this is via a cookie set when you initiate the session. Since it appears you are redirecting the user to the member's only page using the Location header on the same page the session is initiated, the PHPSESSID cookie will not be set. Thus, once the user arrives at the member's only page, PHP won't be able to identify the user. Their session variable is still there, but PHP won't give it to a stranger. :) Basically, in your HTTP reponse that includes the Set-Cookie header, it needs to be a regular 200 OK response and not a protocol level redirection. If you absolutely have to have the behavior you're going for here, you're going to have to use a meta refresh for the redirection. Yes, it's not as cool, but it's the only way to set a cookie and redirect the client in the same response. Otherwise, you'll have to pass the value of the cookie on the URL, which might be a good option for you actually. Hope that helps. Previous Comments: ------------------------------------------------------------------------ [2001-12-21 20:35:17] [EMAIL PROTECTED] Let me check this thing ;) ------------------------------------------------------------------------ [2001-12-21 12:19:47] [EMAIL PROTECTED] The problem as I understand it is in the use of session.auto_start in the php.ini and session_start() in the script. session.auto_start has to be set to 0 (zero) if using session_start() in the script. The code seems to work with this setting. Somehow I did not see this in any of the documentation or other bug reports. Thanks for the assistance. Kannan ------------------------------------------------------------------------ [2001-12-21 08:52:59] [EMAIL PROTECTED] Dupe of 6121 ------------------------------------------------------------------------ [2001-12-21 08:36:04] [EMAIL PROTECTED] I have reviewed the Bugs database against the following IDs 13732 - is closed with no reply or resolution indicated. 12704 - marked Bogus 12679 - does not solve my situation (session.cookie_domain). I am not using one. It is left blank. 8912 - similar. But in my case browser refresh on the target page also does not solve the problem. The only thin that works is clicking on a href link to go to the target page. I am using Apache Webserver 1.3.22 for Windows. Kannan ------------------------------------------------------------------------ [2001-12-21 03:12:13] [EMAIL PROTECTED] I have 2 scripts: a script to login a user and set a session variable. After checking session_is_registered() I redirect to a url using header(). The target script checks for the session variable and is not able to find it. If I use href to go to the target page, the session variable is found. I have reviewed the bugs database, and the solutions reported for similar cases do not work for me. The following are portion of the code used: I tested the code on a Linux server and it works perfectly. Thank you. Kannan Environment: Windows 2000, IE 5.5, Linux 4.0.6 Login.php>> $db = db_connect(); $result = mysql_query($query, $db); if (mysql_num_rows($result) >0 ) { // if they are in the database register the user id $row = mysql_fetch_array($result); $suser = $user; session_register("suser"); } } if (session_is_registered("suser")) { if ($redirect<>"") header("location: $redirect"); // redirect is instantiated with 'members_only.php' else { echo "You are logged in as: $suser <br>"; echo "suser: $suser<br>"; echo "<a href=\"members_only.php\">Members Only</a><br>"; echo "<a href=\"logout.php\">Log out</a><br>"; // ======= redirect to URL ==== } } ..... members_only.php>> <? session_start(); // check session variable echo "Members_only<br>"; echo "$suser<br>"; if (session_is_registered("suser")) { echo "Members Only Page<br>"; echo "<p>You are logged in as $suser.</p>"; echo "<p>Members only content goes here</p>"; echo "<a href=\"login.php\">Back to main page</a>"; echo "<a href=\"logout.php\">Logout</a>"; } else { $redirect = "members_only.php"; header("location: login.php?redirect=$redirect"); } ?> php.ini>> [Session] session.save_handler = files session.save_path = C:\temp session.use_cookies = 1 session.name = FOO session.auto_start = 1 session.cookie_lifetime = 60 session.cookie_path = c:\temp session.cookie_domain = session.serialize_handler = php session.gc_probability = 1 session.gc_maxlifetime = 1440 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = private session.cache_expire = 180 session.use_trans_sid = 1 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=14636&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php