PHP里面管理session需要实现如下函数:
#define PS_OPEN_FUNC(x) int ps_open_##x(PS_OPEN_ARGS)
#define PS_CLOSE_FUNC(x) int ps_close_##x(PS_CLOSE_ARGS)
#define PS_READ_FUNC(x) int ps_read_##x(PS_READ_ARGS)
#define PS_WRITE_FUNC(x) int ps_write_##x(PS_WRITE_ARGS)
#define PS_DESTROY_FUNC(x) int ps_delete_##x(PS_DESTROY_ARGS)
#define PS_GC_FUNC(x) int ps_gc_##x(PS_GC_ARGS)
#define PS_CREATE_SID_FUNC(x) char *ps_create_sid_##x(PS_CREATE_SID_ARGS)
可参看: ext/session/php_session.h
至于这些函数在什么时候被触发调用,参看: ext/session/session.c
管理session的实例可以参看memcache模块(其它模块也有); 如关闭函数的定义:
- PS_CLOSE_FUNC(memcache)
- {
- mmc_pool_t *pool = PS_GET_MOD_DATA();
- if (pool) {
- mmc_pool_free(pool TSRMLS_CC);
- PS_SET_MOD_DATA(NULL);
- }
- return SUCCESS;
- }
一般情况下,一个请求中session只回写一次,在请求结束时回写;如果要在中间强制回写,则可以使用: session_write_close();函数, 但是一定要注意,回写之后session状态为关闭状态,再给$_SESSION数组赋值是不会回写的,除非重新session_start();