브라우저 장애를 막아줄 수 있는 자동쿠키 삭제 프로그램
쿠키를 너무 많이 생성하면 브라우저에 문제가 발생 할 수 있고 작동을 하지 않습니다.
자동으로 초기화 해주면 좋은데 그렇지 않기 때문에 헤더에서 페이지 읽을때 마다 체크 해서 자동삭제 해주는 프로그램 있으면 문제가 발생 하지 않도록 할 수 있습니다.
아래는 어디에서 이런 문제가 발생 했는지 쿠키 이름이라도 저장하는 기능이 있으면 좋을텐데 그 부분은 빠져 있으니 필요하신 분은 간단한 작업이므로 넣으셔서 사용하시면 됩니다.
<?php
class CookieManager {
private $maxHeaderSize = 4096; // 일반적인 헤더 크기 제한
private $maxCookieSize = 4000; // 안전 여유분 포함
public function checkAndClean() {
$currentSize = $this->getCurrentHeaderSize();
if ($currentSize > $this->maxCookieSize) {
$this->cleanupCookies();
return true;
}
return false;
}
private function getCurrentHeaderSize() {
$size = 0;
foreach ($_COOKIE as $key => $value) {
$size += strlen($key) + strlen($value) + 2;
}
return $size;
}
private function cleanupCookies() {
$cookies = $_COOKIE;
$cookieSizes = [];
// 각 쿠키 크기 계산
foreach ($cookies as $key => $value) {
$cookieSizes[$key] = strlen($key) + strlen($value);
}
// 크기 순으로 정렬 (큰 것부터)
arsort($cookieSizes);
$currentSize = $this->getCurrentHeaderSize();
// 크기가 제한 이하가 될 때까지 큰 쿠키부터 삭제
foreach ($cookieSizes as $key => $size) {
if ($currentSize <= $this->maxCookieSize) {
break;
}
setcookie($key, '', time() - 3600, '/');
$currentSize -= $size;
error_log("쿠키 삭제: {$key} ({$size} bytes)");
}
}
}
// 사용 예제
$manager = new CookieManager();
if ($manager->checkAndClean()) {
echo "헤더 크기 초과로 쿠키를 정리했습니다.";
}
아래는 웹서버, 브라우저의 버전에 따라 크기는 변경 될 수 있으며(대체로 커짐) 참고만 하시면 됩니다. 보통 4KB 이내면 문제될일이 없습니다.
▷ 브라우저별 제한
- Chrome/Edge: 약 256KB (전체 헤더)
- Firefox: 약 10KB (쿠키 헤더)
- Safari: 약 8KB (쿠키 헤더)
▷ 웹서버별 제한:
- Apache: 기본 8KB (LimitRequestFieldSize)
- Nginx: 기본 4KB~8KB (large_client_header_buffers)
- IIS: 기본 16KB
