setcookie.phpt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. --TEST--
  2. setcookie() tests
  3. --INI--
  4. date.timezone=UTC
  5. --FILE--
  6. <?php
  7. setcookie('name');
  8. setcookie('name', '');
  9. setcookie('name', 'value');
  10. setcookie('name', 'space value');
  11. setcookie('name', 'value', 0);
  12. setcookie('name', 'value', $tsp = time() + 5);
  13. setcookie('name', 'value', $tsn = time() - 6);
  14. setcookie('name', 'value', $tsc = time());
  15. setcookie('name', 'value', 0, '/path/');
  16. setcookie('name', 'value', 0, '', 'domain.tld');
  17. setcookie('name', 'value', 0, '', '', TRUE);
  18. setcookie('name', 'value', 0, '', '', FALSE, TRUE);
  19. setcookie('name', 'value', ['expires' => $tsp]);
  20. setcookie('name', 'value', ['expires' => $tsn, 'path' => '/path/', 'domain' => 'domain.tld', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict']);
  21. $expected = array(
  22. 'Set-Cookie: name=deleted; expires='.date('D, d-M-Y H:i:s', 1).' GMT; Max-Age=0',
  23. 'Set-Cookie: name=deleted; expires='.date('D, d-M-Y H:i:s', 1).' GMT; Max-Age=0',
  24. 'Set-Cookie: name=value',
  25. 'Set-Cookie: name=space%20value',
  26. 'Set-Cookie: name=value',
  27. 'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsp).' GMT; Max-Age=5',
  28. 'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsn).' GMT; Max-Age=0',
  29. 'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsc).' GMT; Max-Age=0',
  30. 'Set-Cookie: name=value; path=/path/',
  31. 'Set-Cookie: name=value; domain=domain.tld',
  32. 'Set-Cookie: name=value; secure',
  33. 'Set-Cookie: name=value; HttpOnly',
  34. 'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsp).' GMT; Max-Age=5',
  35. 'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsn).' GMT; Max-Age=0; path=/path/; domain=domain.tld; secure; HttpOnly; SameSite=Strict'
  36. );
  37. $headers = headers_list();
  38. if (($i = count($expected)) > count($headers))
  39. {
  40. echo "Fewer headers are being sent than expected - aborting";
  41. return;
  42. }
  43. do {
  44. $header = current($headers);
  45. if (strncmp($header, 'Set-Cookie:', 11) !== 0) {
  46. continue;
  47. }
  48. // If the second rolls over between the time() call and the internal time determination by
  49. // setcookie(), we might get Max-Age=4 instead of Max-Age=5.
  50. $header = str_replace('Max-Age=4', 'Max-Age=5', $header);
  51. if ($header === current($expected)) {
  52. $i--;
  53. } else {
  54. echo "Header mismatch:\n\tExpected: "
  55. .current($expected)
  56. ."\n\tReceived: ".current($headers)."\n";
  57. }
  58. next($expected);
  59. }
  60. while (next($headers) !== FALSE);
  61. echo ($i === 0)
  62. ? 'OK'
  63. : 'A total of '.$i.' errors found.';
  64. ?>
  65. --EXPECTHEADERS--
  66. --EXPECT--
  67. OK