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
'programing' 카테고리의 다른 글
| 개체 문자열을 JSON으로 변환 (0) | 2023.03.10 |
|---|---|
| 만약...엘세...을 사용할 수 있습니까?리액트 렌더 함수에 있는 문? (0) | 2023.03.10 |
| Oracle에서 PL/SQL 출력을 플러시하는 방법이 있습니까? (0) | 2023.03.10 |
| jq에서 해당 키의 키 및 값을 기준으로 json 파일을 정렬하는 방법 (0) | 2023.03.10 |
| 리액션 리덕스 내 성분과 용기의 차이 (0) | 2023.03.10 |