@@ -225,8 +225,12 @@ export function setChunkedCookie(
225225 reqCookies . set ( name , value ) ;
226226
227227 // When we are writing a non-chunked cookie, we should remove the chunked cookies
228+ // Remove any previously stored chunks for this cookie name
228229 getAllChunkedCookies ( reqCookies , name ) . forEach ( ( cookieChunk ) => {
229- deleteCookie ( resCookies , cookieChunk . name , finalOptions . path ) ;
230+ deleteCookie ( resCookies , cookieChunk . name , {
231+ path : finalOptions . path ,
232+ domain : finalOptions . domain
233+ } ) ;
230234 reqCookies . delete ( cookieChunk . name ) ;
231235 } ) ;
232236
@@ -251,18 +255,23 @@ export function setChunkedCookie(
251255 // clear unused chunks
252256 const chunks = getAllChunkedCookies ( reqCookies , name ) ;
253257 const chunksToRemove = chunks . length - chunkIndex ;
254-
255258 if ( chunksToRemove > 0 ) {
256259 for ( let i = 0 ; i < chunksToRemove ; i ++ ) {
257260 const chunkIndexToRemove = chunkIndex + i ;
258261 const chunkName = `${ name } ${ CHUNK_PREFIX } ${ chunkIndexToRemove } ` ;
259- deleteCookie ( resCookies , chunkName , finalOptions . path ) ;
262+ deleteCookie ( resCookies , chunkName , {
263+ path : finalOptions . path ,
264+ domain : finalOptions . domain
265+ } ) ;
260266 reqCookies . delete ( chunkName ) ;
261267 }
262268 }
263269
264270 // When we have written chunked cookies, we should remove the non-chunked cookie
265- deleteCookie ( resCookies , name , finalOptions . path ) ;
271+ deleteCookie ( resCookies , name , {
272+ path : finalOptions . path ,
273+ domain : finalOptions . domain
274+ } ) ;
266275 reqCookies . delete ( name ) ;
267276}
268277
@@ -323,19 +332,21 @@ export function getChunkedCookie(
323332 * @param name - The name of the main cookie to delete.
324333 * @param reqCookies - The request cookies object containing all cookies from the request.
325334 * @param resCookies - The response cookies object to manipulate the cookies in the response.
335+ * @param isLegacyCookie - Whether to handle legacy cookie format.
336+ * @param options - Options for cookie deletion including domain and path.
326337 */
327338export function deleteChunkedCookie (
328339 name : string ,
329340 reqCookies : RequestCookies ,
330341 resCookies : ResponseCookies ,
331342 isLegacyCookie ?: boolean ,
332- path ?: string
343+ options ?: Pick < CookieOptions , "domain" | "path" >
333344) : void {
334345 // Delete main cookie
335- deleteCookie ( resCookies , name , path ) ;
346+ deleteCookie ( resCookies , name , options ) ;
336347
337348 getAllChunkedCookies ( reqCookies , name , isLegacyCookie ) . forEach ( ( cookie ) => {
338- deleteCookie ( resCookies , cookie . name , path ) ; // Delete each filtered cookie
349+ deleteCookie ( resCookies , cookie . name , options ) ; // Delete each filtered cookie
339350 } ) ;
340351}
341352
@@ -358,13 +369,29 @@ export function addCacheControlHeadersForSession(res: NextResponse): void {
358369 res . headers . set ( "Expires" , "0" ) ;
359370}
360371
372+ /**
373+ * Deletes a cookie from the response with optional domain and path specifications.
374+ *
375+ * @param resCookies - The response cookies object to manipulate.
376+ * @param name - The name of the cookie to delete.
377+ * @param options - Optional domain and path settings for cookie deletion.
378+ */
361379export function deleteCookie (
362380 resCookies : ResponseCookies ,
363381 name : string ,
364- path ?: string
382+ options ?: Pick < CookieOptions , "domain" | "path" >
365383) {
366- resCookies . set ( name , "" , {
367- maxAge : 0 , // Ensure the cookie is deleted immediately
368- path : path || "/"
369- } ) ;
384+ const deleteOptions : { maxAge : number ; domain ?: string ; path ?: string } = {
385+ maxAge : 0 // Ensure the cookie is deleted immediately
386+ } ;
387+
388+ if ( options ?. domain ) {
389+ deleteOptions . domain = options . domain ;
390+ }
391+
392+ if ( options ?. path ) {
393+ deleteOptions . path = options . path ;
394+ }
395+
396+ resCookies . set ( name , "" , deleteOptions ) ;
370397}
0 commit comments