173 PHP_FUNCTION (setcookie) 174 { 175 char * name, * value = NULL, * path = NULL, * domain = NULL; 176 long expires = 0; 177 zend_bool secure = 0, httponly = 0; 178 int name_len, value_len = 0, path_len = 0, domain_len = 0; 179 180 if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC, "s | slssbb", & name, 181 & name_len, & value, & value_len, & expires, & path, 182 & path_len, & domain, & domain_len, & secure, & httponly) = FAILURE ){ 183 return; 184} 185 186 if (php_setcookie (name, name_len, value, value_len, expires, path, path_len, domain, Domain_len, secure, 1, httponly TSRMLS_CC) = SUCCESS ){ 187 RETVAL_TRUE; 188} else { 189 RETVAL_FALSE; 190} 191} 76 PHPAPI int php_setcookie (char * name, int name_len, char * value, int value_len, time_t Expires, char * path, int path_len, char * domain, int domain_len, int secure, int url_encode, Int httponly TSRMLS_DC) 77 { 78 char * cookie, * encoded_value = NULL; 79 int len = sizeof ("Set-Cookie :"); 80 char * dt; 81 sapi_header_line ctr = {0 }; 82 int result; 83 84 if (name & strpbrk (name, "=,; trn1314 ")! = NULL) {/* man isspace for 13 And 14 */ 85 zend_error (E_WARNING, "Cookie names cannot contain any of the following '= ,; \ T \ r \ n \ 013 \ 014 '"); 86 return FAILURE; 87} 88 89 if (! Url_encode & value & strpbrk (value, ",; trn1314 ")! = NULL) {/* man Isspace for 13 and 14 */ 90 zend_error (E_WARNING, "Cookie values cannot contain any of the following ',; \ T \ r \ n \ 013 \ 014 '"); 91 return FAILURE; 92} 93 94 len + = name_len; 95 if (value & url_encode ){ 96 int encoded_value_len; 97 98 encoded_value = php_url_encode (value, value_len, & encoded_value_len ); 99 len + = encoded_value_len; 100} else if (value ){ 101 encoded_value = estrdup (value ); 102 len + = value_len; 103} 104 if (path ){ 105 len + = path_len; 106} 107 if (domain ){ 108 len + = domain_len; 109} 110 111 cookie = emalloc (len + 100 ); 112 113 if (value & value_len = 0 ){ 114 /* 115 * MSIE doesn't delete a cookie when you set it to a null value 116 * so in order to force cookies to be deleted, even on MSIE, we 117 * pick an expiry date in the past 118 */ 119 dt = php_format_date ("D, d-M-Y H: I: s T", sizeof ("D, d-M-Y H: I: s T")-1, 1, 0 TSRMLS_CC ); 120 snprintf (cookie, len + 100, "Set-Cookie: % s = deleted; expires = % s", name, dt ); 121 efree (dt ); 122} else { 123 snprintf (cookie, len + 100, "Set-Cookie: % s = % s", name, value? Encoded_value: ""); 124 if (expires> 0 ){ 125 const char * p; 126 strlcat (cookie, "; expires =", len + 100 ); 127 dt = php_format_date ("D, d-M-Y H: I: s T", sizeof ("D, d-M-Y H: I: s T")-1, Expires, 0 TSRMLS_CC ); 128/* check to make sure that the year does not exceed 4 digits in length */ 129 p = zend_memrchr (dt, '-', strlen (dt )); 130 if (! P | * (p + 5 )! = ''){ |