I’m creating a bilingual site and have decided to use session_start
to determine the language of the page using the following:
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
The problem with this is that it clashes with WordPress and I get the following:
Warning: session_start() [function.session-start]: Cannot send session
cookie – headers already sent by (output started at
/home/neurosur/public_html/v2/wp-content/themes/default/header.php:8)
in /home/neurosur/public_html/v2/wp-content/themes/default/region.php
on line 13
Is there a way to get around this?
EDIT
WordPress sends header info before the header.php file is run. So starting the session in the header.php may still conflict with the header info that wordpress sends. Running it on init avoids that problem. (From jammypeach’s comment)
Write the following code in your functions.php file:
Now if you want to set data in session, do like this
I’ve changed my original answer to the correct one from @rafi (see below).
Write the following code in your functions.php file:
I found an interesting article by Peter here. I’m using the following code in my
functions.php
:This destroys old session when user logs out then in again with different account.
Based on this answer and the answers given here, it’s best to use the following code snippets:
For versions of PHP >= 5.4.0, PHP 7:
Reference: http://www.php.net/manual/en/function.session-status.php
For versions of PHP < 5.4.0:
Reference: https://www.php.net/manual/en/function.session-id.php
I don’t want to take any credits, I just felt like sharing this information would be helpful.
for PHP version 7.4
When you use this code, you may get the critical issue in the WP Site Health Status. The error says that;
To suppress this error, you may make this revision when you want to start a session in the WP;