Php 如何在Wordpress中使用session_start?
我正在创建一个双语网站,并决定使用Php 如何在Wordpress中使用session_start?,php,wordpress,session,Php,Wordpress,Session,我正在创建一个双语网站,并决定使用session\u start确定页面的语言,使用以下内容: session_start(); if(!isset($_SESSION['language'])){ $_SESSION['language'] = 'English'; //default language } 问题是它与Wordpress冲突,我得到以下信息: session_start(); if(!isset($_SESSION['language'])){
session\u start
确定页面的语言,使用以下内容:
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
问题是它与Wordpress冲突,我得到以下信息:
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
警告:会话启动()[函数.会话启动]:无法发送会话
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行
有什么办法可以绕过这个问题吗?我已经将原来的答案从@rafi改为正确答案(见下文) 在functions.php文件中编写以下代码:
function register_my_session()
{
if( !session_id() )
{
session_start();
}
}
add_action('init', 'register_my_session');
function register_my_session()
{
if( !session_id() )
{
session_start();
}
}
add_action('init', 'register_my_session');
编辑
Wordpress在header.php文件运行之前发送header信息。因此,在header.php中启动会话可能仍然与wordpress发送的头信息冲突。在init上运行它可以避免这个问题。(摘自jammypache的评论)
在functions.php文件中编写以下代码:
function register_my_session()
{
if( !session_id() )
{
session_start();
}
}
add_action('init', 'register_my_session');
function register_my_session()
{
if( !session_id() )
{
session_start();
}
}
add_action('init', 'register_my_session');
现在,如果要在会话中设置数据,请执行以下操作
$_SESSION['username'] = 'rafi';
我发现了彼得写的一篇有趣的文章。我在
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 ();
}
当用户注销然后使用不同的帐户再次登录时,这会破坏旧会话。根据此处给出的信息和答案,最好使用以下代码段:
对于PHP>=5.4.0、php7的版本:
function register_my_session() {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
}
add_action('init', 'register_my_session');
function register_my_session() {
if(session_id() == '') {
session_start();
}
}
add_action('init', 'register_my_session');
参考:
对于PHP<5.4.0的版本:
function register_my_session() {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
}
add_action('init', 'register_my_session');
function register_my_session() {
if(session_id() == '') {
session_start();
}
}
add_action('init', 'register_my_session');
参考:
我不想获得任何学分,我只是觉得分享这些信息会很有帮助。当然,在调用session\u start()之前不要做任何输出。这意味着您需要缓冲WP生成的所有内容,直到会话\u start调用为止,或者在呈现链中更早地插入会话\u start。@MarcB我已经尝试过多次,但始终无法使其正常工作。代码中有错误,您在会话\u start()之后忘记了分号。您应该更正它。这是更好的答案-wordpress在header.php文件运行之前发送头,因此在那里启动会话可能仍然与wordpress发送的头冲突。在init上运行它可以避免这个问题。init hook更适合session_start。编辑header.php文件假定他没有编写插件,等等。真是个糟糕的黑客行为。这是一个糟糕的做法检查其他答案!