이미 시작된 PHP 세션
내 PHP 코드에서 세션이 이미 시작되었고 새 세션을 시작하려고 하면 다음과 같은 알림이 표시됩니다.
주의: 세션이 이미 시작되었습니다.session_start() 무시
어떻게 하면 피할 수 있을까요?
해라
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
새것을 원하신다면, 그렇게 하세요.session_destroy()
시작 전에.기동하기 전에 설정이 되어 있는지 확인하려면 , 다음의 연락처로 문의해 주세요.
$status = session_status();
if($status == PHP_SESSION_NONE){
//There is no active session
session_start();
}else
if($status == PHP_SESSION_DISABLED){
//Sessions are not available
}else
if($status == PHP_SESSION_ACTIVE){
//Destroy current and start new one
session_destroy();
session_start();
}
글로벌 체크는 피하고 싶다.$_SESSION
전화하는 대신session_status()
PHP가 명시적으로 이 함수를 구현한 이후의 메서드:
새로운 함수 session_status를 통한 세션 상태 노출: (PHP > = 5.4.0)용입니다.
이전 세션을 파기하는 경우에만:
<?php
if(!isset($_SESSION))
{
session_start();
}
else
{
session_destroy();
session_start();
}
?>
또는 를 사용할 수 있습니다.
unset($_SESSION['variable_session _data'])
특정 세션 변수를 삭제합니다.
session_status() === PHP_SESSION_ACTIVE ?: session_start();
클로즈드
예, 세션이 이미 실행 중인지 여부를 확인하려면isset($_SESSION)
하지만 전화는 하지 않는 것이 가장 좋은 대답입니다.session_start()
한 번이 아닙니다.
스크립트의 매우 이른 단계에서 첫 번째 줄까지 호출한 후 다시 호출하지 마십시오.
코드의 여러 곳에 있는 경우는, 이러한 종류의 버그를 요구하고 있는 것입니다.한 군데에만 있고 한 번만 호출할 수 있도록 잘라냅니다.
이미 세션 시작을 호출해야 합니다. 포함을 통해 다시 호출될 수도 있습니다.
if( ! $_SESSION)
{
session_start();
}
$_SESSION의 차단 동작을 수정하려고 하다가 이 문제가 발생했습니다.
http://konrness.com/php5/how-to-prevent-blocking-php-requests/
세션 파일은 스크립트가 완료되거나 세션을 수동으로 닫을 때까지 잠긴 상태로 유지됩니다.
따라서 기본적으로는 페이지는 읽기 전용 모드로 세션을 열어야 합니다.그러나 일단 읽기 전용으로 열리면 닫혔다가 다시 열어야 쓰기 모드가 됩니다.
const SESSION_DEFAULT_COOKIE_LIFETIME = 86400;
/**
* Open _SESSION read-only
*/
function OpenSessionReadOnly() {
session_start([
'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME,
'read_and_close' => true, // READ ACCESS FAST
]);
// $_SESSION is now defined. Call WriteSessionValues() to write out values
}
/**
* _SESSION is read-only by default. Call this function to save a new value
* call this function like `WriteSessionValues(["username"=>$login_user]);`
* to set $_SESSION["username"]
*
* @param array $values_assoc_array
*/
function WriteSessionValues($values_assoc_array) {
// this is required to close the read-only session and
// not get a warning on the next line.
session_abort();
// now open the session with write access
session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]);
foreach ($values_assoc_array as $key => $value) {
$_SESSION[ $key ] = $value;
}
session_write_close(); // Write session data and end session
OpenSessionReadOnly(); // now reopen the session in read-only mode.
}
OpenSessionReadOnly(); // start the session for this page
그런 다음 값을 쓸 때:
WriteSessionValues(["username"=>$login_user]);
이 함수는 키=>값 쌍의 배열을 사용하여 더욱 효율적으로 만듭니다.
이거 먹어봐
if(!isset($_SESSION)){
session_start();
}
ob_start()를 사용하는 것이 좋습니다.Sesson 변수를 시작하기 전에 브라우저 버퍼를 주문해야 합니다.
편집: $_SESS 뒤에 추가) 추가이온
위의 어느 것도 적절하지 않습니다.$Session 변수에 의존하는 모든 php 파일에서 session_start()를 호출하지 않으면 포함되지 않습니다.알림이 너무 귀찮아서 Error_log가 금방 꽉 차 버립니다.제가 찾을 수 있는 유일한 해결책은 이것뿐입니다.
error_reporting(E_ALL ^ E_NOTICE);
session_start();
A 불량 수정. 하지만 작동한다.
보다 효율적입니다.
@session_start();
화면에 오류 핸들러가 표시되지 않도록 합니다.
베스트
<?php
if ( session_id() != "" ) {
session_start();
}
기본적으로 다른 세션을 만들기 전에 세션이 시작되었는지 확인해야 합니다. ... 추가 판독치.
한편, 기존 세션을 파기하고 나서를 사용하여 다른 세션을 작성했습니다.
언급URL : https://stackoverflow.com/questions/10648984/php-sessions-that-have-already-been-started
'itsource' 카테고리의 다른 글
Vue 바인딩 상위 및 하위 구성 요소 (0) | 2022.09.26 |
---|---|
MariaDb Json 지원 (0) | 2022.09.26 |
자모듈을 빌드하지 않고 부모 POM 설치 (0) | 2022.09.26 |
리소스 번들에 배치하면 Apostrope가 올바르게 변환되지 않음 (0) | 2022.09.26 |
PHP에서 NULL을 확인합니다. (0) | 2022.09.26 |