백엔드 개발 PHP 튜토리얼 自定义session处理 关于read write顺序有关问题

自定义session处理 关于read write顺序有关问题

Jun 13, 2016 pm 12:17 PM
nbsp session write

自定义session处理 关于read write顺序问题

本帖最后由 hxx_yang 于 2015-04-10 13:00:11 编辑 header("content-type:text/html;charset=utf-8");

define('SESSION_PRE', 'XX_');
define('BR', '
');
function start ($savePath , $sessionName) {
    global $sessionPath;
    $sessionPath = $savePath . DIRECTORY_SEPARATOR;
    echo __METHOD__ . BR;
    return true;
}

function close () {
    echo __METHOD__ . BR;
    return true;
}

function read ($sessionId) {
    global $sessionPath, $sessionFile;
    $sessionFile = $sessionPath . DIRECTORY_SEPARATOR . ESSION_PRE . $sessionId;
    echo __METHOD__ . BR;
    return @file_get_contents($sessionFile);
    
}

function write ($sessionId , $data) {
    global $sessionFile;
    $sessionFile = $sessionPath . DIRECTORY_SEPARATOR . ESSION_PRE . $sessionId;
    echo __METHOD__ . BR;
    return @file_put_contents($sessionFile,$data);
}

function destroy ($sessionId) {
    global $sessionFile;
    @unlink($sessionFile);
    echo __METHOD__ . BR;
    return true;
}

function gc ($maxLifeTime) {
    echo __METHOD__ . BR;
    global $sessionPath;
    foreach(glob($sessionPath."/*") as $file){
if (filemtime($file)+$maxLifeTime     @unlink($file);
}
    }
    return true;
}
session_set_save_handler("start", "close", "read", "write", "destroy", "gc");

session_start();      //101行
$_SESSION['name'] = 'Lielei';          //102行
print_r($_SESSION);          //103行
?>

问题描述:
         按我的理解session_start()开启后,依次运行的函数是 start , read, write , close。
官方资料:PHP 会在脚本执行完毕或调用 session_write_close() 函数之后调用write函数。

那么,在第一次运行此脚本到103行时,为什么会输出Lilei呢,此时$_SESSION中的数据是
从session文件中读取出来的吗?如果是,脚本不是还没有结束吗,怎么会执行write呢?如果不是,
此时的$_SESSION只是相当于普通的数组吗?103行不过是输出一个普通的数组而已嘛?
------解决思路----------------------
頁面未結束,不會執行session_write_close(); 所以不會更新到session文件,你讀取的只是內存中的session的值。
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

해결 방법: 조직에서 PIN 변경을 요구합니다. 해결 방법: 조직에서 PIN 변경을 요구합니다. Oct 04, 2023 pm 05:45 PM

해결 방법: 조직에서 PIN 변경을 요구합니다.

Windows 11에서 창 테두리 설정을 조정하는 방법: 색상 및 크기 변경 Windows 11에서 창 테두리 설정을 조정하는 방법: 색상 및 크기 변경 Sep 22, 2023 am 11:37 AM

Windows 11에서 창 테두리 설정을 조정하는 방법: 색상 및 크기 변경

Windows 11에서 제목 표시줄 색상을 변경하는 방법은 무엇입니까? Windows 11에서 제목 표시줄 색상을 변경하는 방법은 무엇입니까? Sep 14, 2023 pm 03:33 PM

Windows 11에서 제목 표시줄 색상을 변경하는 방법은 무엇입니까?

Windows 11/10 복구의 OOBELANGUAGE 오류 문제 Windows 11/10 복구의 OOBELANGUAGE 오류 문제 Jul 16, 2023 pm 03:29 PM

Windows 11/10 복구의 OOBELANGUAGE 오류 문제

Windows 11에서 작업 표시줄 축소판 미리 보기를 활성화 또는 비활성화하는 방법 Windows 11에서 작업 표시줄 축소판 미리 보기를 활성화 또는 비활성화하는 방법 Sep 15, 2023 pm 03:57 PM

Windows 11에서 작업 표시줄 축소판 미리 보기를 활성화 또는 비활성화하는 방법

Windows 11의 디스플레이 크기 조정 가이드 Windows 11의 디스플레이 크기 조정 가이드 Sep 19, 2023 pm 06:45 PM

Windows 11의 디스플레이 크기 조정 가이드

Windows 11에서 밝기를 조정하는 10가지 방법 Windows 11에서 밝기를 조정하는 10가지 방법 Dec 18, 2023 pm 02:21 PM

Windows 11에서 밝기를 조정하는 10가지 방법

Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까? Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까? Nov 29, 2023 pm 11:21 PM

Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까?

See all articles