diff options
author | Yasuo Ohgaki <yohgaki@php.net> | 2015-01-21 19:13:59 +0900 |
---|---|---|
committer | Yasuo Ohgaki <yohgaki@php.net> | 2015-01-22 13:34:58 +0900 |
commit | e6c8640a2a242b4c620923dcbe5f93c8366585e7 (patch) | |
tree | 4eff7b05ff1c9a44eed52f5c1ae86dcf071cca7a /ext/session/php_session.h | |
parent | ebb60ac7dd179a3bea540d50a7d595010a82a656 (diff) | |
download | php-git-e6c8640a2a242b4c620923dcbe5f93c8366585e7.tar.gz |
WIP - test passes
Diffstat (limited to 'ext/session/php_session.h')
-rw-r--r-- | ext/session/php_session.h | 82 |
1 files changed, 60 insertions, 22 deletions
diff --git a/ext/session/php_session.h b/ext/session/php_session.h index c384b1f97b..c5750066fd 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -27,21 +27,19 @@ # include "ext/hash/php_hash.h" #endif -#define PHP_SESSION_API 20020330 - -/* To check php_session_valid_key()/php_session_reset_id() */ -#define PHP_SESSION_STRICT 1 - -#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name -#define PS_CLOSE_ARGS void **mod_data -#define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val -#define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val -#define PS_DESTROY_ARGS void **mod_data, zend_string *key -#define PS_GC_ARGS void **mod_data, int maxlifetime, int *nrdels +#define PHP_SESSION_API 20150121 + +/* save handler macros */ +#define PS_NUM_APIS 9 +#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name +#define PS_CLOSE_ARGS void **mod_data +#define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val +#define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val +#define PS_DESTROY_ARGS void **mod_data, zend_string *key +#define PS_GC_ARGS void **mod_data, int maxlifetime, int *nrdels #define PS_CREATE_SID_ARGS void **mod_data - -/* default create id function */ -PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS); +#define PS_VALIDATE_SID_ARGS void **mod_data, zend_string *key +#define PS_UPDATE_TIMESTAMP_ARGS void **mod_data, zend_string *key, zend_string *val typedef struct ps_module_struct { const char *s_name; @@ -52,6 +50,8 @@ typedef struct ps_module_struct { int (*s_destroy)(PS_DESTROY_ARGS); int (*s_gc)(PS_GC_ARGS); zend_string *(*s_create_sid)(PS_CREATE_SID_ARGS); + int (*s_validate_sid)(PS_VALIDATE_SID_ARGS); + int (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS); } ps_module; #define PS_GET_MOD_DATA() *mod_data @@ -64,7 +64,10 @@ typedef struct ps_module_struct { #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) zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS) +#define PS_VALIDATE_SID_FUNC(x) int ps_validate_sid_##x(PS_VALIDATE_SID_ARGS) +#define PS_UPDATE_TIMESTAMP_FUNC(x) int ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS) +/* Legacy save handler module definitions */ #define PS_FUNCS(x) \ PS_OPEN_FUNC(x); \ PS_CLOSE_FUNC(x); \ @@ -76,9 +79,10 @@ typedef struct ps_module_struct { #define PS_MOD(x) \ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ - ps_delete_##x, ps_gc_##x, php_session_create_id + ps_delete_##x, ps_gc_##x, php_session_create_id, \ + php_session_validate_sid, php_session_update_timestamp -/* SID creation enabled module handler definitions */ +/* Legacy SID creation enabled save handler module definitions */ #define PS_FUNCS_SID(x) \ PS_OPEN_FUNC(x); \ PS_CLOSE_FUNC(x); \ @@ -86,11 +90,33 @@ typedef struct ps_module_struct { PS_WRITE_FUNC(x); \ PS_DESTROY_FUNC(x); \ PS_GC_FUNC(x); \ - PS_CREATE_SID_FUNC(x) + PS_CREATE_SID_FUNC(x); \ + PS_VALIDATE_SID_FUNC(x); \ + PS_UPDATE_TIMESTAMP_FUNC(x); #define PS_MOD_SID(x) \ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ - ps_delete_##x, ps_gc_##x, ps_create_sid_##x + ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \ + php_session_validate_sid, php_session_update_timestamp + +/* Update timestamp enabled save handler module definitions + New save handlers should use this API */ +#define PS_FUNCS_UPDATE_TIMESTAMP(x) \ + PS_OPEN_FUNC(x); \ + PS_CLOSE_FUNC(x); \ + PS_READ_FUNC(x); \ + PS_WRITE_FUNC(x); \ + PS_DESTROY_FUNC(x); \ + PS_GC_FUNC(x); \ + PS_CREATE_SID_FUNC(x); \ + PS_VALIDATE_SID_FUNC(x); \ + PS_UPDATE_TIMESTAMP_FUNC(x); + +#define PS_MOD_UPDATE_TIMESTAMP(x) \ + #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ + ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \ + ps_validate_sid_##x, ps_update_timestamp_##x + typedef enum { php_session_disabled, @@ -99,7 +125,6 @@ typedef enum { } php_session_status; typedef struct _php_session_rfc1867_progress { - size_t sname_len; zval sid; smart_str key; @@ -141,7 +166,7 @@ typedef struct _php_ps_globals { int module_number; zend_long cache_expire; union { - zval names[7]; + zval names[PS_NUM_APIS]; struct { zval ps_open; zval ps_close; @@ -150,6 +175,8 @@ typedef struct _php_ps_globals { zval ps_destroy; zval ps_gc; zval ps_create_sid; + zval ps_validate_sid; + zval ps_update_timestamp; } name; } mod_user_names; int mod_user_implemented; @@ -169,7 +196,6 @@ typedef struct _php_ps_globals { zend_long hash_bits_per_character; int send_cookie; int define_sid; - zend_bool invalid_session_id; /* allows the driver to report about an invalid session id and request id regeneration */ php_session_rfc1867_progress *rfc1867_progress; zend_bool rfc1867_enabled; /* session.upload_progress.enabled */ @@ -180,7 +206,8 @@ typedef struct _php_ps_globals { double rfc1867_min_freq; /* session.upload_progress.min_freq */ zend_bool use_strict_mode; /* whether or not PHP accepts unknown session ids */ - unsigned char session_data_hash[16]; /* binary MD5 hash length */ + zend_bool lazy_write; /* omit session write when it is possible */ + zend_string *session_vars; /* serialized original session data */ } php_ps_globals; typedef php_ps_globals zend_ps_globals; @@ -221,6 +248,12 @@ typedef struct ps_serializer_struct { #define PS_SERIALIZER_ENTRY(x) \ { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) } +/* default create id function */ +PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS); +/* Dummy PS module functions */ +PHPAPI int php_session_validate_sid(PS_VALIDATE_SID_ARGS); +PHPAPI int php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS); + PHPAPI void session_adapt_url(const char *, size_t, char **, size_t *); PHPAPI void php_add_session_var(zend_string *name); @@ -288,6 +321,9 @@ extern zend_class_entry *php_session_iface_entry; #define PS_SID_IFACE_NAME "SessionIdInterface" extern zend_class_entry *php_session_id_iface_entry; +#define PS_UPDATE_TIMESTAMP_IFACE_NAME "SessionUpdateTimestampHandlerInterface" +extern zend_class_entry *php_session_update_timestamp_iface_entry; + extern PHP_METHOD(SessionHandler, open); extern PHP_METHOD(SessionHandler, close); extern PHP_METHOD(SessionHandler, read); @@ -295,5 +331,7 @@ extern PHP_METHOD(SessionHandler, write); extern PHP_METHOD(SessionHandler, destroy); extern PHP_METHOD(SessionHandler, gc); extern PHP_METHOD(SessionHandler, create_sid); +extern PHP_METHOD(SessionHandler, validateId); +extern PHP_METHOD(SessionHandler, updateTimestamp); #endif |