php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
php_session.h
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Author: Sascha Schumann <sascha@schumann.cx> |
14 +----------------------------------------------------------------------+
15 */
16
17#ifndef PHP_SESSION_H
18#define PHP_SESSION_H
19
22
23#define PHP_SESSION_API 20161017
24
25#include "php_version.h"
26#define PHP_SESSION_VERSION PHP_VERSION
27
28/* save handler macros */
29#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name
30#define PS_CLOSE_ARGS void **mod_data
31#define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val, zend_long maxlifetime
32#define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime
33#define PS_DESTROY_ARGS void **mod_data, zend_string *key
34#define PS_GC_ARGS void **mod_data, zend_long maxlifetime, zend_long *nrdels
35#define PS_CREATE_SID_ARGS void **mod_data
36#define PS_VALIDATE_SID_ARGS void **mod_data, zend_string *key
37#define PS_UPDATE_TIMESTAMP_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime
38
51
52#define PS_GET_MOD_DATA() *mod_data
53#define PS_SET_MOD_DATA(a) *mod_data = (a)
54
55#define PS_OPEN_FUNC(x) zend_result ps_open_##x(PS_OPEN_ARGS)
56#define PS_CLOSE_FUNC(x) zend_result ps_close_##x(PS_CLOSE_ARGS)
57#define PS_READ_FUNC(x) zend_result ps_read_##x(PS_READ_ARGS)
58#define PS_WRITE_FUNC(x) zend_result ps_write_##x(PS_WRITE_ARGS)
59#define PS_DESTROY_FUNC(x) zend_result ps_delete_##x(PS_DESTROY_ARGS)
60#define PS_GC_FUNC(x) zend_long ps_gc_##x(PS_GC_ARGS)
61#define PS_CREATE_SID_FUNC(x) zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS)
62#define PS_VALIDATE_SID_FUNC(x) zend_result ps_validate_sid_##x(PS_VALIDATE_SID_ARGS)
63#define PS_UPDATE_TIMESTAMP_FUNC(x) zend_result ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS)
64
65/* Legacy save handler module definitions */
66#define PS_FUNCS(x) \
67 PS_OPEN_FUNC(x); \
68 PS_CLOSE_FUNC(x); \
69 PS_READ_FUNC(x); \
70 PS_WRITE_FUNC(x); \
71 PS_DESTROY_FUNC(x); \
72 PS_GC_FUNC(x); \
73 PS_CREATE_SID_FUNC(x)
74
75#define PS_MOD(x) \
76 #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
77 ps_delete_##x, ps_gc_##x, php_session_create_id, \
78 php_session_validate_sid, php_session_update_timestamp
79
80/* Legacy SID creation enabled save handler module definitions */
81#define PS_FUNCS_SID(x) \
82 PS_OPEN_FUNC(x); \
83 PS_CLOSE_FUNC(x); \
84 PS_READ_FUNC(x); \
85 PS_WRITE_FUNC(x); \
86 PS_DESTROY_FUNC(x); \
87 PS_GC_FUNC(x); \
88 PS_CREATE_SID_FUNC(x); \
89 PS_VALIDATE_SID_FUNC(x); \
90 PS_UPDATE_TIMESTAMP_FUNC(x);
91
92#define PS_MOD_SID(x) \
93 #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
94 ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \
95 php_session_validate_sid, php_session_update_timestamp
96
97/* Update timestamp enabled save handler module definitions
98 New save handlers should use this API */
99#define PS_FUNCS_UPDATE_TIMESTAMP(x) \
100 PS_OPEN_FUNC(x); \
101 PS_CLOSE_FUNC(x); \
102 PS_READ_FUNC(x); \
103 PS_WRITE_FUNC(x); \
104 PS_DESTROY_FUNC(x); \
105 PS_GC_FUNC(x); \
106 PS_CREATE_SID_FUNC(x); \
107 PS_VALIDATE_SID_FUNC(x); \
108 PS_UPDATE_TIMESTAMP_FUNC(x);
109
110#define PS_MOD_UPDATE_TIMESTAMP(x) \
111 #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
112 ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \
113 ps_validate_sid_##x, ps_update_timestamp_##x
114
115
121
123 size_t sname_len;
126
133
134 zval data; /* the array exported to session data */
135 zval files; /* data["files"] array */
136 zval *post_bytes_processed; /* data["bytes_processed"] */
138 zval current_file; /* array of currently uploading file */
140
141typedef struct _php_ps_globals {
155 void *mod_data;
166 struct {
183 bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
186
189
192
194 char *rfc1867_prefix; /* session.upload_progress.prefix */
195 char *rfc1867_name; /* session.upload_progress.name */
196 zend_long rfc1867_freq; /* session.upload_progress.freq */
197 double rfc1867_min_freq; /* session.upload_progress.min_freq */
198 bool rfc1867_enabled; /* session.upload_progress.enabled */
199 bool rfc1867_cleanup; /* session.upload_progress.cleanup */
200
201 bool use_strict_mode; /* whether or not PHP accepts unknown session ids */
202 bool lazy_write; /* omit session write when it is possible */
203 bool in_save_handler; /* state if session is in save handler or not */
204 bool set_handler; /* state if session module i setting handler or not */
205 zend_string *session_vars; /* serialized original session data */
207
209
211#define phpext_session_ptr &session_module_entry
212
213#ifdef ZTS
214#define PS(v) ZEND_TSRMG(ps_globals_id, php_ps_globals *, v)
215#ifdef COMPILE_DL_SESSION
217#endif
218#else
219#define PS(v) (ps_globals.v)
220#endif
221
222#define PS_SERIALIZER_ENCODE_ARGS void
223#define PS_SERIALIZER_DECODE_ARGS const char *val, size_t vallen
224
230
231#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x
232#define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x
233
234#define PS_SERIALIZER_ENCODE_FUNC(x) \
235 zend_string *PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS)
236#define PS_SERIALIZER_DECODE_FUNC(x) \
237 zend_result PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)
238
239#define PS_SERIALIZER_FUNCS(x) \
240 PS_SERIALIZER_ENCODE_FUNC(x); \
241 PS_SERIALIZER_DECODE_FUNC(x)
242
243#define PS_SERIALIZER_ENTRY(x) \
244 { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) }
245
246/* default create id function */
248/* Dummy PS module functions */
251
252PHPAPI void session_adapt_url(const char *url, size_t url_len, char **new_url, size_t *new_len);
253
258PHPAPI zval* php_get_session_var_str(const char *name, size_t name_len);
259
261
265
269
270PHPAPI const ps_module *_php_find_ps_module(const char *name);
272
275
276#define PS_ADD_VARL(name) do { \
277 php_add_session_var(name); \
278} while (0)
279
280#define PS_ADD_VAR(name) PS_ADD_VARL(name)
281
282#define PS_DEL_VARL(name) do { \
283 if (!Z_ISNULL(PS(http_session_vars))) { \
284 zend_hash_del(Z_ARRVAL(PS(http_session_vars)), name); \
285 } \
286} while (0)
287
288
289#define PS_ENCODE_VARS \
290 zend_string *key; \
291 zend_ulong num_key; \
292 zval *struc;
293
294/* Do not use a return statement in `code` because that may leak memory.
295 * Break out of the loop instead. */
296#define PS_ENCODE_LOOP(code) do { \
297 zval _zv; \
298 /* protect against user interference */ \
299 ZVAL_COPY(&_zv, Z_REFVAL(PS(http_session_vars))); \
300 HashTable *_ht = Z_ARRVAL(_zv); \
301 ZEND_HASH_FOREACH_KEY(_ht, num_key, key) { \
302 if (key == NULL) { \
303 php_error_docref(NULL, E_WARNING, \
304 "Skipping numeric key " ZEND_LONG_FMT, num_key);\
305 continue; \
306 } \
307 if ((struc = php_get_session_var(key))) { \
308 code; \
309 } \
310 } ZEND_HASH_FOREACH_END(); \
311 zval_ptr_dtor(&_zv); \
312} while(0)
313
315
316void php_session_auto_start(void *data);
317
319
321
323
325
326extern PHP_METHOD(SessionHandler, open);
328extern PHP_METHOD(SessionHandler, read);
329extern PHP_METHOD(SessionHandler, write);
330extern PHP_METHOD(SessionHandler, destroy);
331extern PHP_METHOD(SessionHandler, gc);
332extern PHP_METHOD(SessionHandler, create_sid);
333
334#endif
#define PHP_METHOD
Definition php.h:365
#define PHPAPI
Definition php.h:71
struct _php_random_status_state_pcgoneseq128xslrr64 php_random_status_state_pcgoneseq128xslrr64
struct _php_random_algo_with_state php_random_algo_with_state
unsigned char key[REFLECTION_KEY_LEN]
zend_module_entry session_module_entry
Definition session.c:3392
PHPAPI zend_result php_session_destroy(void)
Definition session.c:171
PHPAPI zval * php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash)
Definition session.c:208
#define PS_GC_ARGS
Definition php_session.h:34
PHPAPI zend_class_entry * php_session_update_timestamp_iface_entry
PHPAPI php_session_status php_get_session_status(void)
Definition session.c:1738
#define PS_READ_ARGS
Definition php_session.h:31
PHPAPI zend_result php_session_valid_key(const char *key)
Definition session.c:359
#define PS_VALIDATE_SID_ARGS
Definition php_session.h:36
php_session_status
@ php_session_disabled
@ php_session_active
@ php_session_none
PHPAPI zend_result php_session_register_module(const ps_module *)
Definition session.c:1181
#define PS_DESTROY_ARGS
Definition php_session.h:33
PHPAPI void session_adapt_url(const char *url, size_t url_len, char **new_url, size_t *new_len)
Definition session.c:1770
#define PS_CLOSE_ARGS
Definition php_session.h:30
#define PS_CREATE_SID_ARGS
Definition php_session.h:35
struct ps_module_struct ps_module
#define PS_UPDATE_TIMESTAMP_ARGS
Definition php_session.h:37
PHPAPI zend_result php_session_reset_id(void)
Definition session.c:1538
PHPAPI void php_add_session_var(zend_string *name)
Definition session.c:194
PHPAPI zval * php_get_session_var(zend_string *name)
Definition session.c:219
php_ps_globals zend_ps_globals
PHPAPI zend_result php_session_register_serializer(const char *name, zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS), zend_result(*decode)(PS_SERIALIZER_DECODE_ARGS))
Definition session.c:1151
PHPAPI zend_result php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS)
Definition session.c:1204
struct ps_serializer_struct ps_serializer
PHPAPI zend_result php_session_flush(int write)
Definition session.c:1727
PHPAPI const ps_serializer * _php_find_ps_serializer(const char *name)
Definition session.c:1511
PHPAPI zend_result php_session_start(void)
Definition session.c:1611
#define PS_OPEN_ARGS
Definition php_session.h:29
#define PS_WRITE_ARGS
Definition php_session.h:32
#define PS_SERIALIZER_DECODE_ARGS
PHPAPI zend_class_entry * php_session_iface_entry
struct _php_session_rfc1867_progress php_session_rfc1867_progress
PHPAPI const ps_module * _php_find_ps_module(const char *name)
Definition session.c:1495
PHPAPI zval * php_get_session_var_str(const char *name, size_t name_len)
Definition session.c:228
PHPAPI zend_result php_session_validate_sid(PS_VALIDATE_SID_ARGS)
Definition session.c:1199
struct _php_ps_globals php_ps_globals
PHPAPI zend_class_entry * php_session_class_entry
PHPAPI zend_class_entry * php_session_id_iface_entry
PHPAPI zend_string * php_session_create_id(PS_CREATE_SID_ARGS)
Definition session.c:335
#define PS_SERIALIZER_ENCODE_ARGS
struct _encode encode
Definition php_soap.h:42
struct php_unserialize_data * php_unserialize_data_t
Definition php_var.h:32
zend_constant * data
php_unserialize_data_t var_hash
Definition session.c:964
double rfc1867_min_freq
php_session_rfc1867_progress * rfc1867_progress
zend_string * mod_user_class_name
zend_long cache_expire
zend_long gc_divisor
zend_long sid_length
php_random_algo_with_state random
zend_string * id
const struct ps_serializer_struct * serializer
bool mod_user_implemented
char * extern_referer_chk
php_random_status_state_pcgoneseq128xslrr64 random_state
char * cookie_samesite
php_session_status session_status
zend_string * session_started_filename
zend_long sid_bits_per_character
const ps_module * default_mod
uint32_t session_started_lineno
zend_long rfc1867_freq
char * rfc1867_prefix
zend_string * session_vars
const ps_module * mod
zend_long gc_maxlifetime
struct _php_ps_globals::@135015107061025277277325020140351335114020303156 mod_user_names
zend_long gc_probability
zend_long cookie_lifetime
zend_result(* s_close)(PS_CLOSE_ARGS)
Definition php_session.h:42
zend_result(* s_validate_sid)(PS_VALIDATE_SID_ARGS)
Definition php_session.h:48
zend_long(* s_gc)(PS_GC_ARGS)
Definition php_session.h:46
const char * s_name
Definition php_session.h:40
zend_result(* s_destroy)(PS_DESTROY_ARGS)
Definition php_session.h:45
zend_result(* s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS)
Definition php_session.h:49
zend_result(* s_open)(PS_OPEN_ARGS)
Definition php_session.h:41
zend_result(* s_write)(PS_WRITE_ARGS)
Definition php_session.h:44
zend_result(* s_read)(PS_READ_ARGS)
Definition php_session.h:43
zend_result(* decode)(PS_SERIALIZER_DECODE_ARGS)
#define close(a)
#define ZEND_TSRMLS_CACHE_EXTERN()
Definition zend.h:67
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
Definition zend_API.h:270
struct _zval_struct zval
int32_t zend_long
Definition zend_long.h:42
struct _zend_string zend_string
struct _zend_module_entry zend_module_entry
struct _zend_class_entry zend_class_entry
ZEND_RESULT_CODE zend_result
Definition zend_types.h:64
zend_string * name