คุกกี้บน localhost ที่มีโดเมนชัดเจน


191

ฉันต้องคิดถึงบางสิ่งพื้นฐานเกี่ยวกับคุกกี้ บน localhost เมื่อฉันตั้งค่าคุกกี้บนฝั่งเซิร์ฟเวอร์และระบุโดเมนอย่างชัดเจนว่าเป็น localhost (หรือ. localhost) ดูเหมือนจะไม่ยอมรับคุกกี้จากเบราว์เซอร์บางตัว

Firefox 3.5:ฉันตรวจสอบคำขอ HTTP ใน Firebug สิ่งที่ฉันเห็นคือ:

Set-Cookie:
    name=value;
    domain=localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

หรือ (เมื่อฉันตั้งค่าโดเมนเป็น. localhost):

Set-Cookie:
    name=value;
    domain=.localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

ไม่ว่าในกรณีใดคุกกี้จะไม่ถูกจัดเก็บ

IE8:ฉันไม่ได้ใช้เครื่องมือพิเศษใด ๆ แต่ดูเหมือนว่าคุกกี้จะไม่ถูกเก็บไว้เช่นกันเพราะมันจะไม่ถูกส่งกลับในการร้องขอครั้งต่อไป

Opera 9.64:ทั้ง localhost และ. localhost ทำงานแต่เมื่อฉันตรวจสอบรายชื่อของคุกกี้ในการตั้งค่าโดเมนจะถูกตั้งเป็น localhost.local แม้ว่าจะอยู่ในรายการภายใต้ localhost (ในการจัดกลุ่มรายการ)

Safari 4:ทั้ง localhost และ. localhost ทำงานแต่จะอยู่ในรายการเป็น. localhost ใน Preferences ในทางกลับกันคุกกี้ที่ไม่มีโดเมนที่ชัดเจนจะถูกแสดงเป็นเพียง localhost (ไม่มีจุด)

localhost มีปัญหาอะไร? เนื่องจากความไม่สอดคล้องกันจำนวนมากจึงต้องมีกฎพิเศษที่เกี่ยวข้องกับ localhost นอกจากนี้ยังไม่ชัดเจนสำหรับฉันว่าทำไมโดเมนต้องนำหน้าด้วยจุด? RFC 2109 ระบุอย่างชัดเจนว่า:

ค่าสำหรับแอตทริบิวต์ของโดเมนไม่มีจุดฝังตัวหรือไม่เริ่มต้นด้วยจุด

ทำไม? เอกสารระบุว่าต้องทำอะไรบางอย่างด้วยความปลอดภัย ฉันต้องยอมรับว่าฉันยังไม่ได้อ่านข้อมูลจำเพาะทั้งหมด (อาจทำในภายหลัง) แต่มันฟังดูแปลก ๆ จากนี้การตั้งค่าคุกกี้บน localhost จะเป็นไปไม่ได้


14
ด้ายอายุ 6 ปีและนี่ยังคงเป็นปัญหา ฉันใช้ Chrome v40 ดูที่นี่
Gaui

5
Chrome 43 ... ยังคงเป็นปัญหาอยู่
Evan Carroll

4
Chrome 54 ที่นี่ไม่ได้รับการแก้ไข
Vahid Amiri

6
Chrome 73 .. ยังคงเผชิญปัญหาเดียวกัน :(
Code_Crash

2
ใครสามารถแก้ปัญหานี้ได้? ยังคงหันหน้าไปทางเดียวกัน *** .. ดูคำตอบนี้
Bonjour123

คำตอบ:


236

จากการออกแบบชื่อโดเมนต้องมีจุดอย่างน้อยสองจุด มิฉะนั้นเบราว์เซอร์จะพิจารณาว่าไม่ถูกต้อง (ดูการอ้างอิงในhttp://curl.haxx.se/rfc/cookie_spec.html )

เมื่อทำงานในlocalhostโดเมนคุกกี้จะต้องถูกตัดออกทั้งหมด เพียงแค่ตั้งค่าให้""หรือNULLหรือFALSEแทน"localhost"ไม่เพียงพอ

สำหรับ PHP ดูความคิดเห็นเกี่ยวกับhttp://php.net/manual/en/function.setcookie.php#73107

หากทำงานกับ Java Servlet API อย่าเรียกใช้cookie.setDomain("...")เมธอดเลย


93
ไม่แน่ใจว่าทำไมทุกคน +1 สิ่งนี้ฉันตั้งค่าโดเมนของคุกกี้เป็นโมฆะหรือเป็นเท็จหรือสตริงว่างเปล่าและมันก็ยังไม่บันทึกถ้าบน localhost
จัสติน

5
ฉันไม่เห็นที่ใดใน RFC6265 เกี่ยวกับสองจุดในโดเมน: tools.ietf.org/html/rfc6265#section-5.2.3 .Net บอกว่าตั้งเป็น ".local" สำหรับโฮสต์ทั้งหมดในโดเมนท้องถิ่นของคุณ ซึ่งดูเหมือนว่าสอดคล้องกับ Opera / Safari msdn.microsoft.com/en-us/library/ckch3yd2.aspx
MandoMando

9
@Justin: หืมคุณอาจจะต้องละเว้นDomain=พารามิเตอร์ทั้งหมดเมื่อตั้งค่าคุกกี้ หากคุณเพิ่งตั้งค่าโดเมนเป็นโมฆะหรือว่างเปล่ากรอบงานของคุณอาจส่งDomain=พารามิเตอร์ที่มีค่านั้นแทนที่จะข้ามหรือไม่ ตรวจสอบด้วยเช่น Firebug
sleske

2
@Ralph หนึ่งล้านขอบคุณสิ่งนี้ทำให้ฉันบ้าไปสองสามชั่วโมง หวังว่าการตั้งค่า Domain เป็น null (ฉันอยู่ใน. Net stack server) ทำงานเหมือนเครื่องราง
Xose Lluis

4
นี่เป็นคำที่ไม่ค่อยดี "การตั้งค่าเป็นโมฆะหรือเท็จหรือสตริงว่าง" ควรอ่าน "ไม่ได้ตั้งค่าส่วน" โดเมน "ของคุกกี้เลย" ตัวอย่างเช่นการใช้การทดสอบอย่างง่ายเพื่อแยกส่วนโดเมนของคุกกี้ออกให้ใช้งานได้สำหรับ((domain && domain !== "localhost") ? ";domain="+domain : "")
โฮสต์ในพื้นที่

34

ฉันเห็นด้วยอย่างกว้าง ๆ กับ @Ralph Buchfelder แต่นี่เป็นการขยายสัญญาณบางส่วนโดยการทดลองเมื่อพยายามทำซ้ำระบบที่มีหลายโดเมนย่อย (เช่น example.com, fr.example.com, de.example.com) บนเครื่องของฉัน ( OS X / Apache / Chrome | Firefox)

ฉันได้แก้ไข / etc / hosts เพื่อชี้โดเมนย่อยในจินตนาการที่ 127.0.0.1:

127.0.0.1 localexample.com
127.0.0.1 fr.localexample.com
127.0.0.1 de.localexample.com

หากฉันกำลังทำงานกับ fr.localexample.com และฉันปล่อยพารามิเตอร์โดเมนออกคุกกี้จะถูกจัดเก็บอย่างถูกต้องสำหรับ fr.localexample.com แต่ไม่สามารถมองเห็นได้ในโดเมนย่อยอื่น ๆ

ถ้าผมใช้โดเมนของ ".localexample.com" คุกกี้จะถูกเก็บไว้อย่างถูกต้องสำหรับ fr.localexample.com และเป็นมองเห็นได้ในโดเมนย่อยอื่น ๆ

ถ้าฉันใช้โดเมนของ "localexample.com" หรือเมื่อฉันพยายามโดเมนเพียง "localexample" หรือ "localhost" คุกกี้ก็ไม่ได้รับการจัดเก็บ

หากฉันใช้โดเมนของ "fr.localexample.com" หรือ ".fr.localexample.com" คุกกี้จะถูกจัดเก็บอย่างถูกต้องสำหรับ fr.localexample.com และมองไม่เห็น (อย่างถูกต้อง) ในโดเมนย่อยอื่น ๆ

ดังนั้นความต้องการที่คุณต้องการอย่างน้อยสองจุดในโดเมนจึงดูเหมือนว่าถูกต้องแม้ว่าฉันจะไม่เห็นสาเหตุที่ควรจะเป็น

หากใครต้องการลองใช้นี่เป็นโค้ดที่มีประโยชน์:

<html>
<head>
<title>
Testing cookies
</title>
</head>
<body>
<?php
header('HTTP/1.0 200');
$domain = 'fr.localexample.com';    // Change this to the domain you want to test.
if (!empty($_GET['v'])) {
    $val = $_GET['v'];
    print "Setting cookie to $val<br/>";
    setcookie("mycookie", $val, time() + 48 * 3600, '/', $domain);
}
print "<pre>";
print "Cookie:<br/>";
var_dump($_COOKIE);
print "Server:<br/>";
var_dump($_SERVER);
print "</pre>";
?>
</body>
</html>

30

localhost:คุณสามารถใช้: domain: ".app.localhost"และมันจะทำงาน 'โดเมน' พารามิเตอร์ต้องการ 1 หรือมากกว่าจุดในชื่อโดเมนสำหรับคุกกี้การตั้งค่า แล้วคุณสามารถมีช่วงการทำงานในโดเมนย่อย localhost api.app.localhost:3000เช่น:


1
ทดสอบและทำงานกับเซิร์ฟเวอร์ node.js โดยใช้ Express 3.x ในexpress.session({cookie: { domain: '.app.localhost', maxAge: 24 * 60 * 60 * 1000 }})
AmpT

3
ควรเลือกคำตอบนี้หากคุณใช้โดเมนท้องถิ่น! การใส่จุดก่อนโดเมนย่อยจะแก้ไขปัญหาของฉัน
Foxhoundn

1
ดังนั้นสิ่งนี้จะเป็นการเตรียมการของการ.app.มาจากไหน มันเป็นส่วนหนึ่งของ SPEC บ้างไหม? และสามารถใช้ได้กับโดเมนที่ไม่สอดคล้องทั้งหมด (โดเมนที่ไม่มีจุดสองจุด) หรือไม่ จะใช้งานกับเบราว์เซอร์รุ่นเก่าได้หรือไม่ : ^)
user2173353

โอ้ ... ฉันเข้าใจแล้ว ... มันเป็นเพียงกลลวงหลอกเบราว์เซอร์ ตกลง.
user2173353

14

เมื่อคุกกี้ถูกตั้งค่าด้วยโดเมนที่ชัดเจนของ 'localhost' ดังต่อไปนี้ ...

Set-Cookie: name = value; domain = localhost ; หมดอายุ = พฤ., 16 ก.ค. - 2552 21:25:05 GMT; path = /

... แล้วเบราว์เซอร์ไม่สนใจมันเพราะมันไม่ได้มีอย่างน้อยสองช่วงเวลาและไม่ได้เป็นหนึ่งในเจ็ดของการจัดการพิเศษโดเมนระดับบนสุด

... โดเมนต้องมีจุดอย่างน้อยสอง (2) หรือสาม (3) จุดเพื่อป้องกันโดเมนของแบบฟอร์ม: ".com", ".edu" และ "va.us" โดเมนใด ๆ ที่ล้มเหลวภายในหนึ่งในเจ็ดโดเมนระดับบนสุดพิเศษที่แสดงด้านล่างต้องการเพียงสองจุด โดเมนอื่นใดต้องการอย่างน้อยสาม โดเมนระดับบนสุดเจ็ดโดเมน ได้แก่ : "COM", "EDU", "NET", "ORG", "GOV", "MIL" และ "INT"

โปรดทราบว่าจำนวนช่วงเวลาด้านบนอาจถือว่าเป็นช่วงเวลาที่จำเป็น ช่วงนี้จะถูกละเว้นในเบราว์เซอร์ที่ทันสมัยและมันควรจะอ่าน ...

อย่างน้อยหนึ่ง (1) หรือสอง (2)งวด

โปรดทราบว่าค่าเริ่มต้นสำหรับแอตทริบิวต์โดเมนเป็นชื่อโฮสต์ของเซิร์ฟเวอร์ที่สร้างการตอบสนองคุกกี้

ดังนั้นวิธีแก้ปัญหาสำหรับคุกกี้ที่ไม่ได้ถูกตั้งค่าไว้สำหรับ localhost ก็คือไม่ต้องระบุแอตทริบิวต์ของโดเมนและให้เบราว์เซอร์ใช้ค่าเริ่มต้น - สิ่งนี้ดูเหมือนจะไม่มีข้อ จำกัด เช่นเดียวกับค่าที่ชัดเจนในแอตทริบิวต์ของโดเมน


ฉันไม่ได้เป็น DV แต่ฉันเดาว่าเหตุผลที่คนอื่นทำก็เพราะคำตอบของคุณไม่ได้เพิ่มคุณค่ามากนัก ข้อกำหนดเกี่ยวกับช่วงเวลาสองช่วงและปล่อยให้แอตทริบิวต์ของโดเมนว่างทั้งคู่ถูกกล่าวถึงในคำตอบอื่น ๆ นอกจากนี้สิ่งที่คุณเพิ่มเกี่ยวกับโดเมนระดับบนสุดดูเหมือนจะไม่ถูกต้อง จากประสบการณ์ของฉันที่ไม่ต้องการ
TTT

@TTT ไม่แน่ใจว่าคุณได้รับคำตอบที่ฉันบอกหรือไม่ว่าควรจะมีอย่างน้อย 1 หรือ 2 ช่วงขึ้นอยู่กับ TLD เพราะช่วงเวลานำจะถูกละเว้น? ดังนั้นฉันจึงให้พื้นหลังเกี่ยวกับปัญหาและเพิ่มจุดที่ฉันไม่คิดว่าจะครอบคลุมในที่อื่น - กฎแตกต่างกันสำหรับโดเมนที่ชัดเจนและที่เบราว์เซอร์เป็นค่าเริ่มต้น ดูเหมือนว่ามันจะเพิ่มคุณค่าให้ฉัน
Scott Munro

1
การปล่อยให้โดเมนเป็นโมฆะ (ไม่ได้ตั้งค่าเลย) จะไม่ทำให้ Chrome เก็บคุกกี้ไว้ในโลคัลโฮสต์ มันยังคงไม่สนใจมัน โปรดทราบว่านี่จะใช้กับคุกกี้ "ถาวร" เท่านั้น (คนที่ตั้งวันหมดอายุ) เพราะมันจะไปที่คุกกี้ "เซสชัน" สำหรับ localhost (คนที่ไม่ได้กำหนดวันหมดอายุ)
Triynko

3

ผลลัพธ์ที่ฉันได้รับแตกต่างกันไปตามเบราว์เซอร์

Chrome- 127.0.0.1 ทำงานได้ แต่ localhost .localhost และ "" ไม่ทำงาน Firefox- .localhost ทำงานได้ แต่ localhost, 127.0.0.1 และ "" ไม่ได้

ยังไม่ได้ทดสอบใน Opera, IE หรือ Safari


3
เพิ่งทดสอบกับ Chrome V.22.0.1229.94 m: การตั้งค่าคุกกี้สำหรับโลคอลโฮสต์โดยไม่ต้องให้Domain=พารามิเตอร์ทำงาน Domain=ยังใช้งานได้ แต่ใช้Domain=localhostไม่ได้
sleske

3

ใช้เวลาอย่างมากในการแก้ไขปัญหานี้ด้วยตนเอง

การใช้ PHP และไม่มีอะไรในหน้านี้ที่เหมาะกับฉัน ในที่สุดฉันก็รู้ในโค้ดของฉันว่าพารามิเตอร์ 'ปลอดภัย' ของ session_set_cookie_params () ของ PHPนั้นถูกตั้งค่าเป็น TRUE เสมอ

เนื่องจากฉันไม่ได้เยี่ยมชม localhost ด้วย https เบราว์เซอร์ของฉันจะไม่ยอมรับคุกกี้ ดังนั้นฉันจึงปรับเปลี่ยนส่วนของรหัสของฉันเพื่อตั้งค่าพารามิเตอร์ 'ปลอดภัย' ตามเงื่อนไข $ _SERVER ['HTTP_HOST'] เป็น 'localhost' หรือไม่ ทำงานได้ดีในขณะนี้

ฉันหวังว่านี่จะช่วยให้ใครบางคน


2

หากคุณกำลังตั้งค่าคุกกี้จากโดเมนอื่น (เช่นคุณตั้งค่าคุกกี้โดยทำการขอข้ามแหล่งกำเนิด XHR) จากนั้นคุณต้องตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าwithCredentialsแอตทริบิวต์เป็นจริงบน XMLHttpRequest ที่คุณใช้เพื่อดึงคุกกี้ดังที่อธิบายไว้ที่นี่


ใช่ด้วยซ้ำ มันยังไม่ทำงานกับคำขอข้ามโดเมน เบราว์เซอร์ - Safari, IE 11
Rohit Kumar

2

คุณสามารถใช้ประโยชน์จากlocalhost.orgหรือมากกว่า.localhost.orgจะแก้ไขให้127.0.0.1


1

ฉันโชคดีกว่าการทดสอบในพื้นที่โดยใช้ 127.0.0.1 เป็นโดเมน ฉันไม่แน่ใจว่าทำไม แต่ฉันได้ผลลัพธ์ที่หลากหลายกับ localhost และ. localhost ฯลฯ


1

การแก้ไขที่แนะนำไม่ทำงานให้ฉัน - ตั้งค่าเป็นโมฆะ, เท็จ, เพิ่มสองจุด, ฯลฯ - ไม่ทำงาน

ในท้ายที่สุดผมก็ลบออกจากโดเมนคุกกี้ถ้ามันเป็น localhost และที่ทำงานตอนนี้สำหรับผมในChrome 38

รหัสก่อนหน้า (ไม่ทำงาน):

document.cookie = encodeURI(key) + '=' + encodeURI(value) + ';domain=.' + document.domain + ';path=/;';

รหัสใหม่ (ตอนนี้ใช้งานได้):

 if(document.domain === 'localhost') {
        document.cookie = encodeURI(key) + '=' + encodeURI(value) + ';path=/;' ;
    } else {
        document.cookie = encodeURI(key) + '=' + encodeURI(value) + ';domain=.' + document.domain + ';path=/;';
    }

1

ฉันมีปัญหาเดียวกันและฉันแก้ไขโดยใส่ 2 จุดในชื่อคุกกี้เองโดยไม่ระบุโดเมนใด ๆ

set-cookie: name.s1.s2=value; path=/; expires=Sun, 12 Aug 2018 14:28:43 GMT; HttpOnly

1

ดูเหมือนจะมีปัญหาเมื่อคุณใช้แล้วhttps://<local-domain> เว็บไซต์จะไม่ส่งคุกกี้ที่มีการร้องขอหลังจากชุดเว็บไซต์พวกเขา บังคับให้โหลดซ้ำและล้างแคชไม่ได้ช่วย การล้างคุกกี้ด้วยตนเองเท่านั้นทำงานได้ นอกจากนี้ถ้าฉันล้างพวกเขาในหน้าจากนั้นหน้าก็เริ่มทำงานอีกครั้งhttp://<local-domain>http://https://https://http://

ดูเหมือนจะเกี่ยวข้องกับ "คุกกี้ที่ปลอดภัยอย่างเข้มงวด" คำอธิบายที่ดีที่นี่ มันถูกปล่อยออกมาใน Chrome 58บน 2017/04/19

ดูเหมือนว่า Chrome จะบันทึกทั้งคุกกี้ที่ปลอดภัยและคุกกี้ที่ไม่ปลอดภัยเพราะมันจะแสดงคุกกี้ที่ถูกต้องทั้งนี้ขึ้นอยู่กับโปรโตคอลของหน้าเว็บเมื่อคลิกที่ไอคอนแถบที่อยู่

แต่Developer tools > Application > Cookiesจะไม่แสดงคุกกี้ที่ไม่ปลอดภัยเมื่อมีคุกกี้ที่ปลอดภัยที่มีชื่อเดียวกันสำหรับโดเมนเดียวกันและจะไม่ส่งคุกกี้ที่ไม่ปลอดภัยพร้อมคำขอใด ๆ สิ่งนี้ดูเหมือนว่าเป็นบั๊กของ Chrome หรือหากคาดว่าพฤติกรรมนี้ควรมีวิธีดูคุกกี้ที่ปลอดภัยเมื่ออยู่บนhttpหน้าเว็บและมีข้อบ่งชี้ว่าพวกเขากำลังถูกแทนที่

วิธีแก้ปัญหาคือการใช้คุกกี้ที่มีชื่อแตกต่างกันขึ้นอยู่กับว่าพวกเขามีไว้สำหรับไซต์ http หรือเว็บไซต์ https และเพื่อตั้งชื่อเฉพาะสำหรับแอปของคุณ __Secure-คำนำหน้าบ่งชี้ว่าคุกกี้ควรจะมีความปลอดภัยอย่างเคร่งครัดและยังเป็นวิธีที่ดีเพราะมีความปลอดภัยและไม่ปลอดภัยจะไม่ชนกัน มีประโยชน์อื่น ๆ ที่จะนำหน้าเช่นกัน

การใช้/etc/hostsโดเมนที่แตกต่างกันสำหรับการเข้าถึง https กับ http จะทำงานได้เช่นกัน แต่การhttps://localhostเข้าชมครั้งหนึ่งโดยไม่ตั้งใจจะป้องกันคุกกี้ใด ๆ ที่มีชื่อเดียวกันกับที่ทำงานบนhttp://localhostไซต์ - ดังนั้นนี่จึงไม่ใช่วิธีแก้ปัญหาที่ดี

ฉันได้ยื่นรายงานข้อผิดพลาดของ Chromeแล้ว


0

document.cookie = valuesename + "=" + value + ";" + หมดอายุ + "; domain =; path = /";

"domain =; path = /"; จะใช้โดเมนแบบไดนามิกเนื่องจากคุกกี้จะทำงานในโดเมนย่อย ถ้าคุณต้องการที่จะทดสอบใน localhost มันจะทำงาน


0

ไม่มีคำตอบที่นี่สำหรับฉัน ฉันแก้ไขได้โดยใส่ PHP ของฉันเป็นสิ่งแรกในหน้าเว็บ

เช่นเดียวกับส่วนหัวอื่น ๆ จะต้องส่งคุกกี้ก่อนที่จะส่งออกใด ๆ จากสคริปต์ของคุณ (นี่คือข้อ จำกัด โปรโตคอล) สิ่งนี้ต้องการให้คุณโทรออกไปยังฟังก์ชั่นนี้ก่อนที่จะส่งออกใด ๆ รวมถึงและแท็กเช่นเดียวกับช่องว่างใด ๆ

จากhttp://php.net/manual/th/function.setcookie.php


ที่ไม่มีอะไรเกี่ยวข้องกับปัญหา แต่นั่นก็ไม่ใช่การทำผิดพลาดของการส่งออกอื่น ๆ ก่อนที่ส่วนหัว
Marnes


0

ฉันเล่นไปรอบ ๆ

Set-Cookie: _xsrf=2|f1313120|17df429d33515874d3e571d1c5ee2677|1485812120; Domain=localhost; Path=/

ใช้ได้กับ Firefox และ Chrome ตั้งแต่วันนี้ อย่างไรก็ตามฉันไม่ได้หาวิธีที่จะทำให้มันทำงานกับขด ฉันลองใช้ Host-Header และ - แก้ไขไม่มีโชคช่วยได้เลย

อย่างไรก็ตามมันใช้งานได้เป็นขดถ้าฉันตั้งไว้

Set-Cookie: _xsrf=2|f1313120|17df429d33515874d3e571d1c5ee2677|1485812120; Domain=127.0.0.1; Path=/

แทน. (ซึ่งใช้ไม่ได้กับ Firefox)


0

รายละเอียดที่สำคัญอีกอย่างexpires =ควรใช้รูปแบบวันที่ต่อไปนี้: Wdy, DD-Mon-YYYY HH: MM: SS GMT ( RFC6265 - ส่วน 4.1.1 )

Set-Cookie:
  name=value;
  domain=localhost;
  expires=Thu, 16-07-2019 21:25:05 GMT;
  path=/

5
-1 ข้อมูลจำเพาะปัจจุบันของคุกกี้คือ RFC 6265, tools.ietf.org/html/rfc6265ซึ่งระบุอย่างชัดเจนว่าอนุญาตให้มี 4 หลักปี ดังนั้นจึงเป็นความคิดที่ดีที่จะใช้เวลา 2 หลักซึ่งเบราว์เซอร์ที่แตกต่างกันจะตีความต่างกัน
sleske

แก้ไข. Ref RFC6265 ส่วน 4.1.1
รถเข็น Zen

4
ถูกต้อง แต่กลับมาในเดือนมิถุนายน 2554 ฉันไม่พบ RFC นี้ ดังนั้นในขณะที่ข้อมูลนี้ไม่ถูกต้องย้อนกลับไปเมื่อฉันเขียนมันไม่ได้
Tralamazza

4
อย่าคิดว่าเป็นเรื่องเล็กน้อยสิ่งต่าง ๆ เปลี่ยนแปลงและเราทุกคนจำเป็นต้องช่วยให้แน่ใจว่าคำตอบยังคงเป็นปัจจุบัน เพียงอัปเดตคำตอบของคุณด้วยข้อมูลล่าสุดที่ @sleske มอบให้คุณและขอบคุณเขาสำหรับความช่วยเหลือของเขา
Matthew Purdon

0

หลังจากการทดลองและอ่านบทความต่าง ๆ มากมายสิ่งนี้ได้ผล ฉันสามารถตั้งค่าคุกกี้หลาย ๆ ตัวอ่านย้อนกลับและตั้งค่าเวลาเป็นลบและลบได้

func addCookie(w http.ResponseWriter, name string, value string) {
    expire := time.Now().AddDate(0, 0, 1)
    cookie := http.Cookie{
       Name:    name,
       Value:   value,
       Expires: expire,
       Domain:  ".localhost",
       Path:    "/",
    }
    http.SetCookie(w, &cookie)
}

0

สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือการตั้งค่าPath=/บนคุกกี้

ยิ่งไปกว่านั้นค่าเริ่มต้นของแอตทริบิวต์ path ดูเหมือนจะแตกต่างจากเบราว์เซอร์ไปยังเบราว์เซอร์แม้ว่าฉันจะทดสอบเพียงสองรายการเท่านั้น (Firefox และ Chrome)

Chrome พยายามตั้งค่าคุกกี้ตามที่เป็นอยู่ หากpathละเว้นแอตทริบิวต์ในSet-Cookieส่วนหัวจะไม่ถูกเก็บและละเว้น

อย่างไรก็ตาม Firefox เก็บคุกกี้แม้ว่าจะไม่มีpathแอตทริบิวต์ที่ชัดเจน มันเพิ่งตั้งค่าด้วยเส้นทางที่ร้องขอ URL คำขอของฉันคือ/api/v1/usersและเส้นทางถูกตั้งค่า/api/v1โดยอัตโนมัติ

อย่างไรก็ตามเบราว์เซอร์ทั้งสองทำงานเมื่อpathตั้งค่าเป็น/แม้ไม่มีโดเมนที่ชัดเจนเช่นDomain=localhostหรืออะไรก็ตาม ดังนั้นจึงมีความแตกต่างในวิธีที่แต่ละเบราว์เซอร์จัดการกับคุกกี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.