使用 Javascript 仅会话 cookie

IT技术 javascript html
2021-02-27 14:36:34

我想知道是否可以使用 Javascript 创建仅会话 cookie。当浏览器关闭时,cookie 应该被删除。

我不能在服务器上使用任何东西,因为该网站只是 HTML ......所以没有使用服务器端脚本。

我在这里读到了一些关于这个的东西:http : //blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/ 但我找不到关于这个的更多信息......所以我是想知道这个方法是否可靠。

4个回答

对,那是正确的。

不放入expires部件将创建会话 cookie,无论它是在 JavaScript 中创建的还是在服务器上创建的。

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

它对我不起作用,并以多种方式尝试过......也许这个答案已经过时了。
2021-04-16 14:36:34
@Dan 会话 cookie 在启用配置的情况下不起作用:浏览器中的“从您离开的地方继续”。在这种情况下,浏览器不会在关闭后销毁会话 cookie。
2021-04-17 14:36:34
@TaronSaribekyan 你是对的,但你必须要求你网站的所有用户禁用配置“从你离开的地方继续”。取而代之的是 sessionStorage 在所有浏览器中都可以直接工作。
2021-05-10 14:36:34

一个更简单的解决方案是使用sessionStorage,在这种情况下:

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

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

但是,请记住,sessionStorage将所有内容保存为字符串,因此在处理数组/对象时,您可以使用 JSON 来存储它们:

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

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

只要浏览器打开,页面会话就会持续,并在页面重新加载和恢复后继续存在。在新选项卡或窗口中打开页面将导致启动新会话。

因此,当您关闭页面/选项卡时,数据将丢失。

在这种情况下,cookie 应该是可靠的,尽管我不知道它们的支持程度如何。
2021-04-22 14:36:34
是的,会话存储是此用例的最佳选择。
2021-04-28 14:36:34
会话(和本地)存储受同源策略的影响,因此如果您从 http 切换到 https,您将无法访问存储在 http 中的内容(反之亦然)
2021-05-03 14:36:34
实际上现在我正在使用会话存储......但显然当你在 chrome 和 firefox 中打开一个新标签时,你无法访问你存储在会话存储中的东西......所以这就是我查看会话 cookie:代码的原因。 google.com/p/chromium/issues/detail?id=165452
2021-05-10 14:36:34
我认为SessionStorage只提供了一个client-only解决方案,而无法在服务器端访问这些值。在 ASP.Net 和 PHP 等许多服务器端框架中,我们希望在不使用隐藏字段等的情况下轻松访问我们可能存储的客户端值,然后 cookie 成为更好的解决方案,因为 cookie 会自动发送到服务器端。
2021-05-10 14:36:34

要使用 java 脚本创建仅会话 cookie,您可以使用以下内容。这对我有用。

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

然后获取cookie值如下

 //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 "";
}

好的,为了支持 IE,我们可以完全离开“过期”并可以使用它

document.cookie = "mtracker=somevalue; path=/";
expires="" 在 IE 中工作,并允许您将 cookie 的到期时间重置为 Session,如果您已明确设置它
2021-05-08 14:36:34
IE 中的 expires=0 根本不设置 cookie:blog.lysender.com/2011/08/...
2021-05-11 14:36:34

使用以下代码设置会话 cookie,它将一直工作到浏览器关闭。(确保不要关闭标签)

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');
  }
不,设置过期日期不会使它成为浏览器会话 cookie
2021-05-12 14:36:34