programing

Wordpress에서 session_start를 사용하는 방법

javajsp 2023. 3. 10. 21:05

Wordpress에서 session_start를 사용하는 방법

이중언어 사이트를 만들고 있는데session_start다음을 사용하여 페이지 언어를 판별합니다.

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

Wordpress와 충돌하여 다음과 같은 문제가 발생합니다.

경고: session_start() [function].session-start] :세션 쿠키를 보낼 수 없습니다. 헤더가 이미 전송되었습니다(출력 시작은 /home/neurosur/public_html/v2/wp-content/temes/default/header).php:8)를 /home/public_filename/v2/wp-content/filename/default/region으로 설정합니다.13행의 php

이 문제를 해결할 방법이 있을까요?

편집

Wordpress는 헤더 앞에 헤더 정보를 보냅니다.php 파일이 실행됩니다.헤더에서 세션을 시작합니다.php는 워드프레스가 전송하는 헤더 정보와 계속 충돌할 수 있습니다.init시에 실행하는 것으로, 이 문제를 회피할 수 있습니다.(jammypeach의 코멘트로부터)

기능에 다음 코드를 적습니다.php 파일:

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

add_action('init', 'register_my_session');

세션에서 데이터를 설정하려면 다음과 같이 하십시오.

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

원래 답변을 @rafi에서 올바른 답변으로 변경했습니다(아래 참조).

기능에 다음 코드를 적습니다.php 파일:

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

add_action('init', 'register_my_session');

나는 여기에서 피터의 흥미로운 기사를 발견했다.다음 코드를 사용하고 있습니다.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 버전의 경우, 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


학점을 따고 싶지는 않지만, 이 정보를 공유하는 것이 도움이 될 것 같아서요.

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');
add_action('init', 'customSessionStart', 1);
add_action('wp_logout', 'customSessionDestroy');
add_action('wp_login', 'customSessionDestroy');
function customSessionStart()
{
    if (!session_id()) {
        session_start();
    }
}
function customSessionDestroy()
{
    session_destroy();
}

이 코드를 사용하면 WP Site Health Status에 중대한 문제가 발생할 수 있습니다.에러에는, 다음과 같이 표시됩니다.

PHP 세션이 생성되었습니다.session_start()함수 호출이는 REST API 및 루프백 요구를 방해합니다.다음 날짜까지 세션을 종료해야 합니다.session_write_close()HTTP 요청을 작성하기 전에 미리 설정합니다.

이 오류를 억제하기 위해 WP에서 세션을 시작할 때 이 리비전을 작성할 수 있습니다.

session_start([
    'read_and_close' => true,
]);

언급URL : https://stackoverflow.com/questions/11797351/how-to-use-session-start-in-wordpress