PHP 세션이 이미 시작되었는지 확인합니다.
세션이 시작된 페이지에서 호출되거나 세션이 시작되지 않은 페이지에서 호출되는 PHP 파일이 있습니다. 제가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★session_start()이미 시작했어요. 때문에 이렇게 .
if(!isset($_COOKIE["PHPSESSID"]))
{
session_start();
}
하지만 이번에는 이런 경고 메시지를 받았습니다.
주의: 정의되지 않은 변수: _SESSION
세션이 이미 시작되었는지 확인할 수 있는 더 좋은 방법이 있나요?
@session_start제대로 작동해서 경고만 막을 수 있을까요?
PHP > = 5.4.0 , PHP 7, PHP 8 버전에 권장되는 방법
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
참고 자료: http://www.php.net/manual/en/function.session-status.php
PHP < 5.4.0 버전의 경우
if(session_id() == '') {
session_start();
}
PHP 5.4.0 이전 버전의 경우:
if(session_id() == '') {
// session isn't started
}
IMHO, 세션이 시작되었는지 여부를 모르면 세션 관리 코드를 리팩터링하는 것을 고려해야 합니다.
다만, 제 의견은 주관적인 것으로, 세션의 개시 여부를 알 수 없는 상황(아래의 코멘트에 기재되어 있는 예)이 있습니다.
PHP 5.4는 session_status()를 도입했습니다.이것은, 신뢰성이 높은 것입니다.session_id().
다음의 스니펫을 검토해 주세요.
session_id('test');
var_export(session_id() != ''); // true, but session is still not started!
var_export(session_status() == PHP_SESSION_ACTIVE); // false
따라서 세션이 시작되었는지 확인하기 위해 PHP 5.4에서 권장되는 방법은 다음과 같습니다.
session_status() == PHP_SESSION_ACTIVE
당신은 할 수 있고, 정말 쉬워요.
if (!isset($_SESSION)) session_start();
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
}
}
else
{
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
}
PHP 5.4 이전에는 글로벌플래그를 설정하는 것 외에 신뢰할 수 있는 방법이 없었습니다.
고려사항:
var_dump($_SESSION); // null
session_start();
var_dump($_SESSION); // array
session_destroy();
var_dump($_SESSION); // array, but session isn't active.
또는 다음 중 하나를 선택합니다.
session_id(); // returns empty string
session_start();
session_id(); // returns session hash
session_destroy();
session_id(); // returns empty string, ok, but then
session_id('foo'); // tell php the session id to use
session_id(); // returns 'foo', but no session is active.
따라서 PHP 5.4 이전에 글로벌 부울을 설정해야 합니다.
모든 php 버전에 대해
if ((function_exists('session_status')
&& session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
session_start();
}
체크해 주세요.
<?php
/**
* @return bool
*/
function is_session_started()
{
if ( php_sapi_name() !== 'cli' ) {
if ( version_compare(phpversion(), '5.4.0', '>=') ) {
return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
} else {
return session_id() === '' ? FALSE : TRUE;
}
}
return FALSE;
}
// Example
if ( is_session_started() === FALSE ) session_start();
?>
출처: http://php.net
session_id()를 사용하면 설정되지 않은 경우 빈 문자열을 반환합니다.이 방법이 더 신뢰할 수 있습니다.$_COOKIE.
if (strlen(session_id()) < 1) {
session_start();
}
if (session_id() === "") { session_start(); }
도움이 되길 바래!
이것은 모든 PHP 버전에서 작동합니다.PHP 버전을 확인한 후 세션이 PHP 버전을 기반으로 시작되었는지 확인합니다.세션이 시작되지 않으면 세션이 시작됩니다.
function start_session() {
if(version_compare(phpversion(), "5.4.0") != -1){
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
} else {
if(session_id() == '') {
session_start();
}
}
}
필요한 것은 다음과 같습니다.
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
이러한 솔루션의 효율성에 대해서는 잘 모르지만, 이것은 실제 프로젝트의 결과입니다.기본 언어를 정의할 필요가 있는 경우에도 사용됩니다.
/**
* Start session
* Fall back to ukrainian language
*/
function valid_session() {
if(session_id()=='') {
session_start();
$_SESSION['lang']='uk';
$_SESSION['lang_id']=3;
}
return true;
}
@함수 콜이 함수 콜 중에 보고될 수 있는 오류를 억제하기 전에.
추가@전에session_start에러 메시지 인쇄를 피하도록 PHP에 지시합니다.
예를 들어 다음과 같습니다.
사용.session_start()이미 브라우저에 인쇄한 결과 오류가 발생하여 PHP에 "headers cannot be send: started at (12행)"와 같은 메시지가 나타납니다.@session_start()이 경우에도 에러 메시지는 화면에 표시되지 않습니다.
파일을 포함하거나 새 페이지로 리디렉션하기 전에exit()그렇지 않으면 오류가 발생합니다.
이 코드는 모든 경우에 사용할 수 있습니다.
<?php
if (session_status() !== PHP_SESSION_ACTIVE || session_id() === ""){
session_start();
}
?>
PHP 5.3에서는 다음과 같이 동작합니다.
if(!strlen(session_id())){
session_name('someSpecialName');
session_start();
}
그럼 네가 해냈군요.not at if 스테이트먼트를 넣지 않으면 세션을 시작하는 어떤 방법으로든 시작할 수 있습니다.이유는 알 수 없습니다.
응답은 @Meliza Ramos Response (최초 응답 참조)및 http://php.net/manual/en/function.phpversion.php 에 근거하고 있습니다.
액션:
- PHP_VERSION_ID가 없는 경우 정의
- PHP_VERSION_을 기반으로 버전을 확인하는 함수를 정의합니다.아이디
- openSession() 시큐어 함수를 정의합니다.
open Session()만 사용
// PHP_VERSION_ID is available as of PHP 5.2.7, if our
// version is lower than that, then emulate it
if (!defined('PHP_VERSION_ID')) {
$version = explode('.', PHP_VERSION);
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
// PHP_VERSION_ID is defined as a number, where the higher the number
// is, the newer a PHP version is used. It's defined as used in the above
// expression:
//
// $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
//
// Now with PHP_VERSION_ID we can check for features this PHP version
// may have, this doesn't require to use version_compare() everytime
// you check if the current PHP version may not support a feature.
//
// For example, we may here define the PHP_VERSION_* constants thats
// not available in versions prior to 5.2.7
if (PHP_VERSION_ID < 50207) {
define('PHP_MAJOR_VERSION', $version[0]);
define('PHP_MINOR_VERSION', $version[1]);
define('PHP_RELEASE_VERSION', $version[2]);
// and so on, ...
}
}
function phpVersionAtLeast($strVersion = '0.0.0')
{
$version = explode('.', $strVersion);
$questionVer = $version[0] * 10000 + $version[1] * 100 + $version[2];
if(PHP_VERSION_ID >= $questionVer)
return true;
else
return false;
}
function openSession()
{
if(phpVersionAtLeast('5.4.0'))
{
if(session_status()==PHP_SESSION_NONE)
session_start();
}
else // under 5.4.0
{
if(session_id() == '')
session_start();
}
}
if (version_compare(PHP_VERSION, "5.4.0") >= 0) {
$sess = session_status();
if ($sess == PHP_SESSION_NONE) {
session_start();
}
} else {
if (!$_SESSION) {
session_start();
}
}
사실, 이미 해결이 되었기 때문에 여기서 설명하기에는 너무 늦었다.이것은 요리를 선택하여 레스토랑의 메뉴를 설정하고 주문을 삭제/추가/변경하는 프로젝트 중 하나입니다.제가 일하던 서버는 실제 버전이 없어서 좀 더 유연하게 만들었습니다.그것은 그것을 사용하고 시험해보고 싶은 작가들에게 달려있다.
이 코드 스니펫으로 괜찮으시겠어요?
if (!count($_SESSION)>0) {
session_start();
}
세션이 시작되었는지 확인하기 위해 사용합니다.다음과 같이 empty 및 isset을 사용합니다.
if (empty($_SESSION) && !isset($_SESSION)) {
session_start();
}
코드를 재구성하여 다음 주소로 전화를 걸어야 합니다.session_start()1페이지에 1회만 실행할 수 있습니다.
PHP_VERSION_ID는 PHP 5.2.7에서 사용할 수 있으므로 먼저 이것을 확인하고 필요에 따라 작성하십시오. session_statusPHP 5.4에서 입수할 수 있기 때문에, 이것도 체크할 필요가 있습니다.
if (!defined('PHP_VERSION_ID')) {
$version = explode('.', PHP_VERSION);
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}else{
$version = PHP_VERSION_ID;
}
if($version < 50400){
if(session_id() == '') {
session_start();
}
}else{
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
}
제 실습을 바탕으로 하면$_SESSION[]전화할 필요가 있다session_start매번 스크립트를 사용합니다.매뉴얼에 대해서는 아래 링크를 참조해 주세요.
http://php.net/manual/en/function.session-start.php
적어도 나에게는session_start이름이 헷갈리네요.asession_load더 명확해질 수 있습니다.
상태를 다시 한 번 확인하게 되었습니다.php 5.4+
if(session_status() !== PHP_SESSION_ACTIVE){session_start();};
if(session_status() !== PHP_SESSION_ACTIVE){die('session start failed');};
다음 솔루션을 사용하여 PHP 세션이 이미 시작되었는지 확인할 수 있습니다.
if(session_id()== '')
{
echo"Session isn't Start";
}
else
{
echo"Session Started";
}
session_start();
if(!empty($_SESSION['user']))
{
//code;
}
else
{
header("location:index.php");
}
교체하다session_start();포함:
if (!isset($a)) {
a = False;
if ($a == TRUE) {
session_start();
$a = TRUE;
}
}
언급URL : https://stackoverflow.com/questions/6249707/check-if-php-session-has-already-started
'itsource' 카테고리의 다른 글
| WhatsApp API(java/python) (0) | 2022.11.15 |
|---|---|
| 핸들러에서 모든 콜백을 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.15 |
| Vuex-module-decorator, 액션 내 상태 변경 (0) | 2022.11.15 |
| 체크박스가 켜져 있으면 어떻게 체크할 수 있나요? (0) | 2022.11.15 |
| Eclipse 서버 런타임 환경에 Apache Tomcat이 표시되지 않음 (0) | 2022.11.15 |