jquery, xóa cookie


90

Tôi muốn sử dụng JQuery để xóa cookie; Tôi đã thử cái này

$.cookie('name', '', { expires: -1 });

Sau đó, tôi làm mới trang và cookie vẫn ở đó:

alert('name:' +$.cookie('name'));

Tại sao? Cảm ơn


một số trình duyệt sẽ chỉ xóa cookie sau khi trình duyệt được khởi động lại.
ZOLDIK

Câu trả lời:


145

Để xóa cookie bằng JQuery, hãy đặt giá trị thành null:

$.cookie("name", null, { path: '/' });

Chỉnh sửa: Giải pháp cuối cùng là chỉ định rõ ràng thuộc pathtính bất cứ khi nào truy cập cookie, bởi vì OP truy cập cookie từ nhiều trang trong các thư mục khác nhau và do đó các đường dẫn mặc định khác nhau (điều này không được mô tả trong câu hỏi ban đầu). Giải pháp được phát hiện trong cuộc thảo luận dưới đây, điều này giải thích tại sao câu trả lời này được chấp nhận - mặc dù không đúng.

Đối với một số phiên bản cookie jQ, giải pháp trên sẽ đặt cookie thành chuỗi null. Do đó không loại bỏ cookie. Sử dụng mã như được đề xuất bên dưới để thay thế.

$.removeCookie('the_cookie', { path: '/' });

Nhưng từ nguồn ở đây: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}, rằng những gì bên trong hàm xử lý, vì vậy chúng phải hoạt động giống nhau. (các thông số là (name, value, options))
aularon

9
Mã cài đặt cookie và mã kiểm tra có trên cùng một trang không? Nếu không, bạn sẽ cần đặt các pathtùy chọn một cách rõ ràng cho cả hai lệnh, vì nó mặc định là đường dẫn của trang hiện tại. Kiểm tra bằng cách thiết lập để gốc của tên miền cả trong tất cả những nơi mà cookie được đọc và viết của bạn:$.cookie('name', value, {path:'/'})
Chadwick

1
Chadwick> Có thể bạn đúng. Đối với exm. tôi đặt cookie trong site.com, sau đó vào site.com/user, site.com/user/mod, site.com/user/mod/new và tôi muốn xem cookie trong tất cả trang này. Đường dẫn phải trông như thế nào, như thế này: {path: '/'}?
user319854 09/09

2
Mã này không xóa cookie, nhưng đặt null trong giá trị của nó.
Tomzan

12
-1 vì điều này không thực sự loại bỏ cookie. $.removeCookie('cookie_name')làm.
Rosdi Kasim

71

Bạn có thể thử điều này:

$.removeCookie('the_cookie', { path: '/' });

nguồn: https://github.com/carhartl/jquery-cookie#readme


Yah .. Tôi tốt với điều đó
Cataclysm

Khi bạn sử dụng một miền phụ, bạn cũng có thể phải chỉ định nó. Đặc biệt vì thời gian lúc bắt đầu của tên miền có thể được yêu cầu (.www.example.com)
Alexis Wilke

Lưu ý, điều này không hoạt động đối với chúng tôi khi mã cần đi vào một chức năng khác vì bất kỳ lý do gì. $ .cookie ('name', null) như trên có vẻ đáng tin cậy hơn. Tuy nhiên, loại bỏ cookie này có thể hoạt động đối với một số người.
Ligemer

Đây thực sự là câu trả lời thực sự!
Kalaschni

15

Bạn cũng có thể xóa cookie mà không cần sử dụng plugin jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';

4

nó là vấn đề của sự hiểu lầm về cookie. Các trình duyệt nhận ra giá trị cookie không chỉ cho các khóa mà còn so sánh tên miền và đường dẫn tùy chọn. Vì vậy, Trình duyệt nhận ra giá trị khác nhau mà cookie đánh giá khóa đó là 'tên' với tùy chọn cài đặt máy chủ (path = '/'; domain = 'mydomain.com') và khóa là 'tên' mà không có tùy chọn nào.


1

Thử cái này

 $.cookie('_cookieName', null, { path: '/' });

{Path: '/'} thực hiện công việc cho bạn


1

Làm việc cho tôi chỉ khi pathđược thành lập, tức là:

$.cookie('name', null, {path:'/'})

Downvoting nguyên nhân bạn sao chép và dán câu trả lời của tôi là bạn
Otto Kanellis

1
@OttoKanellis vì vậy tôi khuyên bạn nên ghi chú lại câu trả lời được chấp nhận (vì nó đã được chỉnh sửa sau câu trả lời của tôi) và phản đối câu trả lời của bạn (vì bạn chưa làm nổi bật tầm quan trọng của tham số đường dẫn )!
Andron

-3

Những gì bạn đang làm là đúng, vấn đề là ở một nơi khác, ví dụ như cookie đang được thiết lập lại bằng cách nào đó khi làm mới.


4
Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Uri Agassi

Đối với câu trả lời này, những gì tôi đang nói là OP đang làm đúng cách. Việc sao chép-dán mã OP sẽ là thừa và việc thêm một mã khác sẽ gây nhầm lẫn cho người đọc. Người ta có thể cuộn lên và xem OP đang làm gì, nó là "phần thiết yếu" ở đây. Tuy nhiên, nếu bạn cảm thấy sẽ tốt hơn nếu bao gồm một cái gì đó (dường như là một số người, ... Trân trọng
aularon

Vấn đề với các liên kết là chúng có xu hướng "thối rữa" - chúng thay đổi, chúng di chuyển, chúng biến mất (trong trường hợp điển hình - liên kết của bạn đã chết!). Đó là lý do tại sao chúng ta thích mà bạn trích dẫn các văn bản có liên quan từ các liên kết cùng với nó, vì vậy câu trả lời của bạn sẽ được khép kín (xem thêm meta.stackexchange.com/questions/8231/... )
Uri Agassi

Tôi nhận thức rõ điều đó, nhưng một lần nữa: đây không phải là trường hợp ở đây. Toàn bộ câu trả lời ở trên có thể được viết lại thành "Những gì bạn đang làm là đúng, vấn đề là ở một nơi khác, ví dụ như cookie đang được đặt lại bằng cách nào đó khi làm mới". Vì vậy, một lần nữa, trục trặc liên kết là một vấn đề, bao gồm cả câu trả lời bên cạnh liên kết là con đường để đi. Nó chỉ là không liên quan đến câu trả lời này.
aularon

Vì vậy, lặp đi lặp lại, nếu một câu trả lời chứa một liên kết và liên kết đó đã chết, không có nghĩa là câu trả lời đó không đủ tốt. Một số liên kết chỉ ở đó để cung cấp chi tiết bổ sung, nhưng không cần thiết cho sự hoàn chỉnh của câu trả lời. Hành vi này đối với tôi dường như giống như một bot được lập trình tồi không có NLP cơ bản để hiểu liên kết ngữ cảnh được đưa ra. Bạn có lẽ nên ngừng làm điều này.
aularon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.