如何在Wordpress中使用session_start?

时间:2012-08-03 14:07:10

标签: php wordpress session

我正在创建一个双语网站,并决定使用session_start使用以下内容确定页面的语言:

session_start();    
if(!isset($_SESSION['language'])){
    $_SESSION['language'] = 'English'; //default language
}

问题在于它与Wordpress冲突,我得到以下内容:

  

警告:session_start()[function.session-start]:无法发送会话   cookie - 已经发送的标题(输出开始于   /home/neurosur/public_html/v2/wp-content/themes/default/header.php:8)   在/home/neurosur/public_html/v2/wp-content/themes/default/region.php   第13行

有没有办法解决这个问题?

5 个答案:

答案 0 :(得分:37)

修改

Wordpress在运行header.php文件之前发送标头信息。因此,在header.php中启动会话可能仍然与wordpress发送的标头信息冲突。在init上运行它可以避免这个问题。 (来自jammypeach的评论

在functions.php文件中编写以下代码:

function register_my_session()
{
  if( !session_id() )
  {
    session_start();
  }
}

add_action('init', 'register_my_session');

现在,如果您想在会话中设置数据,请执行此操作

$_SESSION['username'] = 'rafi';

答案 1 :(得分:15)

将代码移至header.php文件的顶部。 并检查会话是否已存在:

if(session_id() == '')
     session_start(); 

your code here...

答案 2 :(得分:13)

我在彼得here找到了一篇有趣的文章。我在functions.php中使用了以下代码:

add_action('init', 'myStartSession', 1);
add_action('wp_logout', 'myEndSession');
add_action('wp_login', 'myEndSession');

function myStartSession() {
    if(!session_id()) {
        session_start();
    }
}

function myEndSession() {
    session_destroy ();
}

当用户使用不同的帐户再次注销时,这会破坏旧会话。

答案 3 :(得分:0)

根据this answer和此处给出的答案,最好使用以下代码段:

对于 PHP> = 5.4.0,PHP 7 的版本:

function register_my_session() {
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
}
add_action('init', 'register_my_session');

参考:http://www.php.net/manual/en/function.session-status.php


对于 PHP <5.4.0 版本:

function register_my_session() {
    if(session_id() == '') {
        session_start();
    }
}
add_action('init', 'register_my_session');

参考:https://www.php.net/manual/en/function.session-id.php


我不想获得任何荣誉,我只是想分享这些信息会有所帮助。

答案 4 :(得分:0)

对于 PHP 7.4 版

function register_my_session() {

    if (session_status() === PHP_SESSION_NONE && session_status() !== PHP_SESSION_ACTIVE) {
        @session_start();
    } 
} 
add_action('init', 'register_my_session');