Tìm kiếm trang web

javascript - Làm thế nào để tôi kiểm tra nếu một cookie tồn tại?


Cách tốt để kiểm tra xem cookie có tồn tại không là gì?

Điều kiện:

Cookie tồn tại nếu

cookie1=;cookie1=345534;
//or
cookie1=345534;cookie1=;
//or
cookie1=345534;

Cookie không tồn tại nếu

cookie=;
//or
<blank>

Câu trả lời #1

Bạn có thể gọi hàm getCookie với tên của cookie bạn muốn, sau đó kiểm tra xem nó có bằng null không.

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
        var end = document.cookie.indexOf(";", begin);
        if (end == -1) {
        end = dc.length;
        }
    }
    // because unescape has been deprecated, replaced with decodeURI
    //return unescape(dc.substring(begin + prefix.length, end));
    return decodeURI(dc.substring(begin + prefix.length, end));
} 

function doSomething() {
    var myCookie = getCookie("MyCookie");

    if (myCookie == null) {
        // do cookie doesn't exist stuff;
    }
    else {
        // do cookie exists stuff
    }
}

Câu trả lời #2

Tôi đã tạo một phiên bản thay thế không sử dụng jQuery:

document.cookie.match(/^(.*;)?\s*MyCookie\s*=\s*[^;]+(.*)?$/)

Nó chỉ kiểm tra sự tồn tại của cookie. Một phiên bản phức tạp hơn cũng có thể trả về giá trị của cookie:

value_or_null = (document.cookie.match(/^(?:.*;)?\s*MyCookie\s*=\s*([^;]+)(?:.*)?$/)||[,null])[1]

Đặt tên cookie của bạn vào chỗ MyCookie.

Câu trả lời #3

document.cookie.indexOf('cookie_name=');

Nó sẽ trả về -1 nếu cookie đó không tồn tại.

p.s. Nhược điểm duy nhất của nó là (như đã đề cập trong phần bình luận) nó sẽ nhầm lẫn nếu có cookie được đặt với tên như sau: any_prefix_cookie_name

(Nguồn)

Câu trả lời số 4

Đây là một câu hỏi cũ, nhưng đây là phương pháp tôi sử dụng ...

function getCookie(name) {
    var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); 
    return match ? match[1] : null;
}

Điều này trả về null khi cookie không tồn tại, hoặc khi nó không chứa tên được yêu cầu.
Ngược lại, giá trị (của tên được yêu cầu) sẽ được trả về.

Một cookie không bao giờ nên tồn tại mà không có giá trị -- bởi vì, nói công bằng mà nói, mục đích của nó là gì chứ? 😄
Nếu nó không còn cần thiết nữa, tốt nhất là nên loại bỏ hoàn toàn.

function deleteCookie(name) {
    document.cookie = name +"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
}

Câu trả lời số 5

CHÚ Ý! câu trả lời được chọn có chứa lỗi (câu trả lời của Jac).

nếu bạn có nhiều hơn một cookie (rất có khả năng..) và cookie mà bạn đang lấy là cái đầu tiên trong danh sách, nó sẽ không thiết lập biến "end" và do đó nó sẽ trả về toàn bộ chuỗi các ký tự theo sau "cookieName=" trong chuỗi document.cookie!

dưới đây là phiên bản đã sửa đổi của hàm đó:

function getCookie( name ) {
    var dc,
        prefix,
        begin,
        end;
    
    dc = document.cookie;
    prefix = name + "=";
    begin = dc.indexOf("; " + prefix);
    end = dc.length; // default to end of the string

    // found, and not in first position
    if (begin !== -1) {
        // exclude the "; "
        begin += 2;
    } else {
        //see if cookie is in first position
        begin = dc.indexOf(prefix);
        // not found at all or found as a portion of another cookie name
        if (begin === -1 || begin !== 0 ) return null;
    } 

    // if we find a ";" somewhere after the prefix position then "end" is that position,
    // otherwise it defaults to the end of the string
    if (dc.indexOf(";", begin) !== -1) {
        end = dc.indexOf(";", begin);
    }

    return decodeURI(dc.substring(begin + prefix.length, end) ).replace(/\"/g, ''); 
}

Bài viết liên quan