From: Brian France Date: Wed, 20 Aug 2003 20:51:10 +0000 (+0000) Subject: Added a parameter to php_setcookie to toggle URL encoding of the cookie data X-Git-Tag: RELEASE_0_7~539 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d50e0bf4ded1b1fd8218b11fb0f224c1fb37874e;p=php Added a parameter to php_setcookie to toggle URL encoding of the cookie data Added the function setrawcookie that turns off URL encoding of the cookie data Changed setcookie to turn on the URL encoding of the cookie data --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index b8c77bfc74..9566fa9f8f 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -607,6 +607,7 @@ function_entry basic_functions[] = { PHP_FE(restore_include_path, NULL) PHP_FE(setcookie, NULL) + PHP_FE(setrawcookie, NULL) PHP_FE(header, NULL) PHP_FE(headers_sent, first_and_second__args_force_ref) diff --git a/ext/standard/head.c b/ext/standard/head.c index 542dfe47ac..04d1a8608d 100644 --- a/ext/standard/head.c +++ b/ext/standard/head.c @@ -65,7 +65,7 @@ PHPAPI int php_header(TSRMLS_D) } -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 TSRMLS_DC) +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 TSRMLS_DC) { char *cookie, *encoded_value = NULL; int len=sizeof("Set-Cookie: "); @@ -75,11 +75,14 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t int result; len += name_len; - if (value) { + if (value && url_encode) { int encoded_value_len; encoded_value = php_url_encode(value, value_len, &encoded_value_len); len += encoded_value_len; + } else if ( value ) { + encoded_value = estrdup(value); + len += value_len; } if (path) { len += path_len; @@ -150,7 +153,30 @@ PHP_FUNCTION(setcookie) return; } - if (php_setcookie(name, name_len, value, value_len, expires, path, path_len, domain, domain_len, secure TSRMLS_CC) == SUCCESS) { + if (php_setcookie(name, name_len, value, value_len, expires, path, path_len, domain, domain_len, secure, 1 TSRMLS_CC) == SUCCESS) { + RETVAL_TRUE; + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]]) + Send a cookie with no url encoding of the value */ +PHP_FUNCTION(setrawcookie) +{ + char *name, *value = NULL, *path = NULL, *domain = NULL; + long expires = 0; + zend_bool secure = 0; + int name_len, value_len, path_len, domain_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slssb", &name, + &name_len, &value, &value_len, &expires, &path, + &path_len, &domain, &domain_len, &secure) == FAILURE) { + return; + } + + if (php_setcookie(name, name_len, value, value_len, expires, path, path_len, domain, domain_len, secure, 0 TSRMLS_CC) == SUCCESS) { RETVAL_TRUE; } else { RETVAL_FALSE; diff --git a/ext/standard/head.h b/ext/standard/head.h index b964f033ef..15c8dccf24 100644 --- a/ext/standard/head.h +++ b/ext/standard/head.h @@ -24,9 +24,10 @@ extern PHP_RINIT_FUNCTION(head); PHP_FUNCTION(header); PHP_FUNCTION(setcookie); +PHP_FUNCTION(setrawcookie); PHP_FUNCTION(headers_sent); PHPAPI int php_header(TSRMLS_D); -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 TSRMLS_DC); +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 TSRMLS_DC); #endif