On Mon, Jul 21, 2008 at 11:21 AM, Jason Pruim <[EMAIL PROTECTED]> wrote:
>
> On Jul 21, 2008, at 11:11 AM, tedd wrote:
>
>> Hi gang:
>>
>> I found the problem I was having with sessions and want to share it with
>> you -- it surprised me.
>>
>> To refresh -- I was having a problem with destroying a session. I went
>> through all the steps shown in the manual and dozens of recommended ways of
>> doing it I found on the net.
>>
>> However, I found that while I was actually destroying the session I
>> wanted, another session was being created in a very unexpected way.
>>
>> Now, the manual says:
>>
>> "session_start() creates a session or resumes the current one based on the
>> current session id that's being passed via a request, such as GET, POST, or
>> a cookie."
>>
>> From that one assumes that if you place a session_start at the beginning
>> of each page, then the first time it's encountered, a session will be
>> created and with every encounter thereafter the established session will be
>> used.
>>
>> That's the way it works PROVIDED that you do not use the following in your
>> code:
>>
>> header('Location: http://www.yourdomain.com/whatever/index.php');
>>
>> If you use that statement, then a new session will be created AND you will
>> find that you'll have two sessions working concurrently. That creates
>> several problems -- one of them being while you may destroy the first
>> session, the second will be still remain.
>>
>> Now, how many people knew this?
>>
>> Am I the only one who didn't?
>
> If what you said is true tedd... I didn't know that and it could explain
> some problems I've been having with a website... In a little bit I'll read
> through this thread and see if I can replicate the problem over on my
> server.
>
>
>
> --
>
> Jason Pruim
> Raoset Inc.
> Technology Manager
> MQC Specialist
> 11287 James St
> Holland, MI 49424
> www.raoset.com
> [EMAIL PROTECTED]

Setting a session and then issuing a redirect should not cause. Are
you exiting immediately after you set the location header? (Or at
least calling session_write_close()?)  It sounds like the client is
handling the redirect and calling the new resource before your server
has finished the process and written the session to disk.

I'm pretty sure in ASP that when you call Response.Redirect(...some
resource...) that that call automatically exits the script, but PHP
continues processing the current script (at least until the server
becomes aware that the client is no longer listening).

You could write your own redirect function that does all of this for you:

<?php


function client_redirect($redirect_url) {
    // You should make sure that $redirect_url is valid

    session_write_close();

    // Send the Location header to redirect the client.
    header("Location: $redirect_url");

    // flush any existing output buffers
    while (@ob_end_flush());

    exit();

}

?>

Andrew

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to