今天复习session,有了更进一步的理解,同时也有几个疑惑,请大家帮忙分析一下哈。
第一个问题,在php里,session是有垃圾回收机制的,原理是触发多少次session_start
就可能触发垃圾回收机制。那么我的问题是,如果我的session已经过了1440秒,但是此时没有立即触发回收,可能5分钟内也没触发,此时我还能获取到session的数据么?
第二个问题,关于session的过期原理,书本上说的都说是按照session文件的修改时间。我的疑问如下:1)我普通访问一个网站,在没有修改session数据的情况下,是不是在1440秒后准确退出。2)还是说我每刷新一次网页,session文件都会修改filemtime
呢?session的执行原理是怎样的。
第三个问题,就是php的session_set_save_handler
设置问题了,只有知道了session是怎么处理filemtime
的,才能写好session_set_save_handler
中的read
方法,因为如果是每刷新一次网页就算修改filemtime
的话,势必要在read
中修改filemtime
吧。
획득한 코드는 PHP를 통해 읽기 때문에 원칙적으로 얻을 수 없으며, 읽기 프로세스에서 만료 여부를 다시 확인하므로 만료되면 여전히 얻을 수 없습니다.
1) php.ini에 구성된 시간은 정확하고 유효하지 않습니다. 기본값은 1440입니다. 이 설정은 프로그램에서 수정할 수 있지만 여전히 구성 파일을 수정하는 것이 좋습니다. 왜 옳고 그름이 무효하다고 하는가? PHP는 메모리에 상주하지 않기 때문에 특정 예약된 작업이 트리거되는지 확인하기 위해 각 요청을 사용해야 합니다. 두 번째는 각 가비지 수집으로 인한 성능 손실을 줄이기 위한 것입니다. 가비지 수집 확률은 각각 session.gc_probability 및 session.gc_pisor입니다. 예를 들어 1/100이면 최소 100개의 요청에 대해 한 번만 트리거됩니다.
2) 새로 고칠 때마다 파일 시간이 변경됩니다.
Laravel 프레임워크의 세션 구현을 확인했습니다. 다음은 파일 저장 및 데이터베이스 저장 형식입니다.
파일 시간 새로 고침과 유사한 관련 코드가 발견되지 않았습니다.
테스트 후 파일 저장의 경우 session.gc_maxlifetime을 30초로 설정하세요. 30초를 초과해도 세션 데이터가 해제될 수 있습니다. 그리고 다음 새로 고침 경우 filemtime은 실제로 현재 항목으로 변경됩니다.
누구나 이유를 설명하고 맞춤 저장소를 Memcache로 변경할 수 있나요? 아니면 데이터베이스가 파일과 동일한 형식으로 저장되나요?