เมื่อฉันต้องการลบคุกกี้ฉันลอง
unset($_COOKIE['hello']);
ฉันเห็นในเบราว์เซอร์คุกกี้จาก Firefox ที่ยังคงมีอยู่ ฉันจะลบคุกกี้ได้อย่างไร
เมื่อฉันต้องการลบคุกกี้ฉันลอง
unset($_COOKIE['hello']);
ฉันเห็นในเบราว์เซอร์คุกกี้จาก Firefox ที่ยังคงมีอยู่ ฉันจะลบคุกกี้ได้อย่างไร
คำตอบ:
คุณอาจลองสิ่งนี้
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
มันไม่มีจุดหมายที่จะ มันไม่มีอะไรเปลี่ยนแปลงถ้าคุณลบมัน
unset($_COOKIE['Hello']);
มีความสำคัญหากคุณอาจตรวจสอบคุกกี้ที่ใดที่หนึ่งในรหัส
ตั้งค่าเป็น "" และวันที่หมดอายุเป็นเมื่อวาน (หรือวันใด ๆ ในอดีต)
setcookie("hello", "", time()-3600);
จากนั้นคุกกี้จะหมดอายุในครั้งต่อไปที่โหลดหน้าเว็บ
วิธีที่สะอาดในการลบคุกกี้คือการล้าง$_COOKIE
ค่าและไฟล์คุกกี้ของเบราว์เซอร์:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
โทรนี้ด้วย:setcookie('key', '', time() - 3600, '/');
unsetting
ประสบความสำเร็จ
null
ค่าคุณจะต้องใช้array_key_exists ()แทนเนื่องจากคุกกี้ที่มีnull
ค่าจะไม่ถูกisset()
ตรวจสอบ
หากต้องการลบคุกกี้ที่เชื่อถือได้จะไม่เพียงพอที่จะตั้งค่าให้หมดอายุเมื่อใดก็ได้ในอดีตซึ่งคำนวณโดยเซิร์ฟเวอร์ PHP ของคุณ เนื่องจากคอมพิวเตอร์ไคลเอนต์สามารถและมักจะมีเวลาที่แตกต่างจากเซิร์ฟเวอร์ของคุณ
แนวทางปฏิบัติที่ดีที่สุดคือการเขียนทับคุกกี้ปัจจุบันด้วยคุกกี้ว่างเปล่าซึ่งจะหมดอายุหนึ่งวินาทีในอนาคตหลังจากยุค (1 มกราคม 1970 00:00:00 UTC) ดังนี้:
setcookie("hello", "", 1);
นั่นจะเป็นการยกเลิกการตั้งค่าคุกกี้ในรหัสของคุณ แต่เนื่องจากตัวแปร $ _COOKIE ถูกรีเฟรชในแต่ละคำขอมันจะกลับมาที่หน้าถัดไป
หากต้องการกำจัดคุกกี้จริงๆให้ตั้งค่าวันหมดอายุในอดีต:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
มีคุกกี้หรือไม่?
ฉันมีปัญหาเดียวกันในรหัสของฉันและพบว่ามันเป็นปัญหาเส้นทางคุกกี้ ลองดูโพสต์ล้นสแต็กนี้: ไม่สามารถลบคุกกี้ชุด php
ฉันตั้งค่าคุกกี้โดยใช้ค่าพา ธ เป็น "/" แต่ไม่มีค่าพา ธ ใด ๆ เมื่อฉันพยายามล้างค่าดังนั้นจึงไม่ได้ล้างค่า ดังนั้นนี่คือตัวอย่างของการทำงาน:
การตั้งค่าคุกกี้:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
การล้างคุกกี้:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
หวังว่าจะช่วย
หากคุณตั้งค่าคุกกี้ให้หมดอายุในอดีตเบราว์เซอร์จะลบออก ดูตัวอย่างsetcookie () ที่ php.net
ดูตัวอย่างที่มีข้อความ " ตัวอย่าง # 2 setcookie () ลบตัวอย่าง " จากเอกสาร PHP ในการล้างคุกกี้จากเบราว์เซอร์คุณต้องแจ้งให้เบราว์เซอร์ทราบว่าคุกกี้หมดอายุ ... เบราว์เซอร์จะลบออก unset
เช่นเดียวกับที่คุณใช้มันเพียงแค่ลบคุกกี้ 'hello' ออกจากอาร์เรย์ COOKIE
นี่คือการทำงานของโค้ด PHP v7 setcookie ()
<?php
setcookie('user_id','');
setcookie('session','');
?>
จากเอาต์พุตของ tcpdump ขณะดมบนพอร์ต 80 เซิร์ฟเวอร์ส่งไปยังไคลเอ็นต์ (เบราว์เซอร์) ส่วนหัว HTTP ต่อไปนี้:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
การสังเกตแพ็กเก็ตในคำขอต่อไปนี้เบราว์เซอร์จะไม่ส่งคุกกี้เหล่านี้ในส่วนหัวอีกต่อไป
ในการลบคุกกี้คุณเพียงแค่ตั้งค่าเป็น NULL:
"หากคุณตั้งค่าคุกกี้ด้วยค่าที่ไม่ใช่ค่าเริ่มต้นสำหรับเวลาหมดอายุเส้นทางหรือโดเมนคุณจะต้องระบุค่าเดิมอีกครั้งเมื่อคุณลบคุกกี้เพื่อให้คุกกี้ถูกลบอย่างถูกต้อง" อ้างอิงจากหนังสือ "Learning PHP5"
ดังนั้นรหัสนี้ควรใช้งานได้ (เหมาะสำหรับฉัน):
การตั้งค่าคุกกี้:
setcookie('foo', 'bar', time() + 60 * 5);
การลบคุกกี้:
setcookie('foo', '', time() + 60 * 5);
แต่ฉันสังเกตเห็นว่าทุกคนกำลังกำหนดวันหมดอายุที่ผ่านมาเป็นสิ่งที่จำเป็นและทำไม?
''
null
หากต้องการลบคุกกี้ทั้งหมดคุณสามารถเขียน:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
เพียงตั้งวันหมดอายุเป็นหนึ่งชั่วโมงที่ผ่านมาหากคุณต้องการ "ลบ" คุกกี้เช่นนี้:
setcookie ("TestCookie", "", time() - 3600);
หรือ
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
ที่มา: http://www.php.net/manual/en/function.setcookie.php
คุณควรใช้filter_input()
ฟังก์ชั่นสำหรับทุกคนที่ผู้เข้าชมสามารถป้อน / จัดการเช่นนี้:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
คุณสามารถอ่านเพิ่มเติมได้ที่นี่: http://www.php.net/manual/en/function.filter-input.phpและที่นี่: http://www.w3schools.com/php/func_filter_input.asp
ฉันรู้ว่ามีมานานแล้วนับตั้งแต่มีการสร้างหัวข้อนี้ แต่ฉันเห็นข้อผิดพลาดเล็กน้อยในโซลูชันนี้ (ฉันเรียกได้ว่าเป็นอย่างนั้นเพราะรายละเอียด) ฉันยอมรับว่าทางออกที่ดีกว่าน่าจะเป็นวิธีนี้:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
แต่ในกรณีปัจจุบันคุณลบคุกกี้ในทุกกรณีที่ฟังก์ชัน unset ทำงานและคุณสร้างคุกกี้ที่หมดอายุใหม่ทันทีในกรณีที่ฟังก์ชัน unset ไม่ทำงาน
นั่นหมายความว่าแม้ว่าฟังก์ชั่น unset จะยังคงมีคุกกี้ 2 ตัวในคอมพิวเตอร์ เป้าหมายที่ถามในมุมมองแบบลอจิคัลคือการลบคุกกี้หากเป็นไปได้และหากไม่เป็นจริงทำให้หมดอายุ เพื่อให้ได้ผลลัพธ์ที่ "สะอาด"
ดังนั้นฉันคิดว่าเราควรทำ:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
ขอขอบคุณและขอให้เป็นวันที่ดี :)
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";
// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds
// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];
// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");
// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour.
หากคุณต้องการลบคุกกี้ทั้งหมดจากโดเมนปัจจุบันของคุณรหัสต่อไปนี้จะช่วยคุณได้อย่างแน่นอน
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
รหัสนี้จะลบตัวแปรคุกกี้ออกจากโดเมนของคุณทั้งหมดเช่น; "/" - มันหมายถึงค่าของตัวแปรคุกกี้ที่ตั้งค่าไว้สำหรับโดเมนทั้งหมดไม่เพียง แต่สำหรับโดเมนหรือเส้นทางปัจจุบัน time () - 300 หมายถึงมันตั้งค่าเป็นเวลาก่อนหน้าดังนั้นมันจะหมดอายุ
นั่นคือวิธีที่มันถูกลบอย่างสมบูรณ์แบบ
คุณสามารถตั้งค่าตัวแปรเซสชันตามค่าคุกกี้
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
คุณสามารถใช้ฟังก์ชั่นปรับแต่งนี้:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
หากคุณต้องการลบ $ _COOKIE ['user_account']
เพียงใช้:
unset_cookie('user_account');
มันง่ายมาก!
setcookie("cookiename", "cookievalue", 1);
เมื่อคุณป้อน0
เวลาคุณหมายถึง"ตอนนี้" (+ 0s นับจากนี้เป็นจริงในตอนนี้) สำหรับเบราว์เซอร์และจะลบคุกกี้
setcookie("key", NULL, 0, "/");
ฉันตรวจสอบในเบราว์เซอร์ chrome ที่ให้ฉัน:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
เพียงแค่ตั้งค่าของคุกกี้เป็นfalse
เพื่อยกเลิกการตั้งค่า
setcookie('cookiename', false);
PS: - นั่นเป็นวิธีที่ง่ายที่สุดที่จะทำ
คุณต้องลบคุกกี้ที่มี php ในเซิร์ฟเวอร์ของคุณและใช้ js สำหรับเบราว์เซอร์ของคุณด้วย (ทำโดยใช้ php แต่ไฟล์คุกกี้อยู่ในเบราว์เซอร์ไคลเอ็นต์ด้วย):
ตัวอย่าง:
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
พวกคุณส่วนใหญ่ลืมว่านี่จะใช้งานได้กับเครื่องท้องถิ่นเท่านั้น ในโดเมนคุณจะต้องมีรูปแบบเช่นนี้
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
ใช้ได้กับทุกโดเมนไม่ว่าจะเป็น localhost หรือไม่ก็ตาม
$cookie->delete()
จากgithub.com/delight-im/PHP-Cookie มีประโยชน์ รหัสจากคำถามเพียงแค่ลบคุณสมบัติที่ได้รับการแยกวิเคราะห์ในฝั่งเซิร์ฟเวอร์ คุกกี้จะยังคงอยู่ที่ฝั่งไคลเอ็นต์