Cookie chỉ phiên với Javascript


82

Tôi đã tự hỏi liệu có thể tạo cookie chỉ phiên bằng Javascript hay không. Khi trình duyệt bị đóng, cookie sẽ được gỡ bỏ.

Tôi không thể sử dụng bất kỳ thứ gì trên máy chủ vì trang web chỉ là HTML ... nên không có tập lệnh phía máy chủ nào được sử dụng.

Tôi đã đọc vài thứ về điều này ở đây: http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/ nhưng tôi không thể tìm thấy thêm thông tin nào về điều này ... vì vậy tôi đã tự hỏi nếu phương pháp này là đáng tin cậy.

Câu trả lời:


134

Vâng, điều đó là chính xác.

Không đưa một expiresphần vào sẽ tạo một cookie phiên, cho dù nó được tạo bằng JavaScript hay trên máy chủ.

Xem https://stackoverflow.com/a/532660/1901857


Nó không hoạt động đối với tôi và đã thử theo nhiều cách ... Có thể câu trả lời này đã lỗi thời.
Dan

Cookie @Dan Session không hoạt động trong trường hợp đã bật cấu hình: "Tiếp tục từ nơi bạn đã dừng lại" trong trình duyệt. Trong trường hợp đó, các trình duyệt sẽ không hủy cookie phiên sau khi đóng.
Taron Saribekyan

@TaronSaribekyan bạn nói đúng nhưng bạn phải yêu cầu tất cả người dùng trên trang web của bạn tắt cấu hình "Tiếp tục nơi bạn đã dừng lại". Thay vào đó, sessionStorage đã hoạt động ngay lập tức trong tất cả các trình duyệt.
Dan

50

Một giải pháp đơn giản hơn sẽ là sử dụng sessionStorage, trong trường hợp này:

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

var readValue = sessionStorage['myvariable'];
console.log(readValue);

Tuy nhiên, hãy nhớ rằng sessionStoragelưu mọi thứ dưới dạng chuỗi, vì vậy khi làm việc với mảng / đối tượng, bạn có thể sử dụng JSON để lưu trữ chúng:

var myVariable = {a:[1,2,3,4], b:"some text"};

sessionStorage['myvariable'] = JSON.stringify(myVariable);
var readValue = JSON.parse(sessionStorage['myvariable']);

Phiên trang kéo dài miễn là trình duyệt đang mở và tồn tại qua các lần tải lại và khôi phục trang. Mở một trang trong tab hoặc cửa sổ mới sẽ bắt đầu một phiên mới.

Vì vậy, khi bạn đóng trang / tab, dữ liệu sẽ bị mất.


Có, lưu trữ Phiên là lựa chọn tốt nhất cho casE sử dụng này.
Julien Lafont

11
thực sự bây giờ tôi đang sử dụng lưu trữ phiên ... nhưng dường như khi bạn mở một tab mới trong chrome và firefox, bạn không thể truy cập vào nội dung bạn đã lưu trữ trong bộ nhớ phiên ... vì vậy đó là lý do tại sao tôi đang xem cookie phiên: mã. google.com/p/chromium/issues/detail?id=165452
Daan Poron

Trong trường hợp đó, các cookie phải đáng tin cậy, mặc dù tôi không biết chúng được hỗ trợ tốt như thế nào.
Cerbrus

2
Phiên (và địa phương) lưu trữ bị ảnh hưởng bởi Same-Origin-Chính sách, vì vậy nếu bạn chuyển từ http đến https, bạn không có quyền truy cập vào các công cụ lưu trữ trong http (và visa-versa)
Jeff Lowery

2
Tôi nghĩ rằng SessionStoragechỉ cung cấp một client-onlygiải pháp mà không có bất kỳ quyền truy cập nào vào các giá trị này ở phía máy chủ. Trong nhiều khuôn khổ phía máy chủ như ASP.Net và PHP, chúng tôi muốn dễ dàng truy cập các giá trị phía máy khách mà chúng tôi có thể đã lưu trữ mà không cần sử dụng các trường ẩn, v.v. và khi đó cookie trở thành giải pháp tốt hơn vì cookie được tự động gửi đến phía máy chủ.
Sunil

9

Để tạo cookie chỉ phiên với java script, bạn có thể sử dụng cách sau. Điều này làm việc cho tôi.

document.cookie = "cookiename=value; expires=0; path=/";

sau đó nhận giá trị cookie như sau

 //get cookie 
var cookiename = getCookie("cookiename");
if (cookiename == "value") {
    //write your script
}

//function getCookie        
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return "";
}

Được rồi để hỗ trợ IE, chúng ta có thể để "hết hạn" hoàn toàn và có thể sử dụng

document.cookie = "mtracker=somevalue; path=/";

4
expires = 0 trong IE hoàn toàn không đặt cookie: blog.lysender.com/2011/08/…
JDandChips

1
hết hạn = "" công trình trong IE, và cho phép bạn thiết lập lại kết thúc một cookie để Session, nếu bạn đã thiết lập nó explictly
koolunix

1

Sử dụng mã bên dưới cho cookie phiên thiết lập, nó sẽ hoạt động cho đến khi trình duyệt đóng. (đảm bảo không đóng tab)

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
  }
  function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') {
        c = c.substring(1);
      }
      if (c.indexOf(name) == 0) {
        return c.substring(name.length, c.length);
      }
    }
    return false;
  }
  
  
  if(getCookie("KoiMilGaya")) {
    //alert('found'); 
    // Cookie found. Display any text like repeat user. // reload, other page visit, close tab and open again.. 
  } else {
    //alert('nothing');
    // Display popup or anthing here. it shows on first visit only.  
    // this will load again when user closer browser and open again. 
    setCookie('KoiMilGaya','1');
  }
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.