[PHP-NOTES] note 130222 added to function.session-start

[email protected] ("[email protected]")
Newsgroups php.notes
Message-ID <[email protected]>
Sessions are blocking by default - i.e. after calling `session_start()` the session file will be locked for reading until you either close that connection or explicitly call `session_write_close()`.

That means any additional requests from that user (e.g. opening a new tab or XHR requests) which also open the session will have to wait for the previous request to finish - or at least wait for you to close the session.

You can get around this by closing the session immediately after opening it (which lets you read session data), and then opening it again temporarily whenever you want to update the session:

<?php
// Passing an empty string here explicitly disables automatic cookie headers being generated
session_cache_limiter('');

// You can then set your own session cookie header - and it's the ONLY session cookie header that will be included in the response
setcookie(session_name(), session_id(), /* any other options you want */);

// Note: I avoid using `session_start(['read_and_close' => true]);` because that doesn't update the last-modified date on the session file, which can result in sessions expiring even when they're being actively used.
session_start();
session_write_close();

// ... some processing here

session_start();
$_SESSION['myData'] = 'my value';
session_write_close();
?>

Note that the call to `session_cache_limiter('')` is important to avoid multiple set-cookie headers from being included in the response as others have noted. You then MUST set the cookie yourself, or it won't be set at all.

Take a careful look at all the session cookie related options for `session_start()` and in php.ini to make sure you respect those options appropriately when setting your own cookies.
----
Server IP: 45.112.84.4
Probable Submitter: 80.90.5.137 (proxied: 14.1.35.58)
----
Manual Page -- https://php.net/manual/en/function.session-start.php
Edit        -- https://main.php.net/note/edit/130222
Del: integrated  -- https://main.php.net/note/delete/130222/integrated
Del: useless     -- https://main.php.net/note/delete/130222/useless
Del: bad code    -- https://main.php.net/note/delete/130222/bad+code
Del: spam        -- https://main.php.net/note/delete/130222/spam
Del: non-english -- https://main.php.net/note/delete/130222/non-english
Del: in docs     -- https://main.php.net/note/delete/130222/in+docs
Del: other reasons-- https://main.php.net/note/delete/130222
Reject      -- https://main.php.net/note/reject/130222
Search      -- https://main.php.net/manage/user-notes.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.