使用Javascript仅会话cookie

Daa*_*ron 68 html javascript html5

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

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

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

Rhu*_*orl 119

对,那是正确的.

expires参与会创建会话cookie,无论是在JavaScript中还是在服务器上创建.

请参阅/sf/answers/37286231/


Cer*_*rus 42

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

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

var readValue = sessionStorage['myvariable'];
console.log(readValue);
Run Code Online (Sandbox Code Playgroud)

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

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

sessionStorage['myvariable'] = JSON.stringify(myVariable);
var readValue = JSON.parse(sessionStorage['myvariable']);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 实际上现在我正在使用会话存储...但显然当你在chrome和firefox中打开一个新选项卡时,你无法访问存储在会话存储中的东西......所以这就是为什么我在看会话cookie:http: //code.google.com/p/chromium/issues/detail?id=165452 (11认同)
  • 此外,`sessionStorage`在此日期不适用于IE! (7认同)
  • 我认为`SessionStorage` 只提供一个`client-only` 解决方案,而无法在服务器端访问这些值。在 ASP.Net 和 PHP 等许多服务器端框架中,我们希望轻松访问我们可能存储的客户端值,而无需使用隐藏字段等,然后 cookie 成为更好的解决方案,因为 cookie 会自动发送到服务器端。 (3认同)
  • 会话(和本地)存储受Same-Origin-Policy的影响,因此如果您从http切换到https,则无法访问存储在http中的内容(反之亦然) (2认同)

Gau*_*wal 6

要使用java脚本创建仅会话cookie,您可以使用以下内容.这适合我.

document.cookie = "cookiename=value; expires=0; path=/";
Run Code Online (Sandbox Code Playgroud)

然后获得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 "";
}
Run Code Online (Sandbox Code Playgroud)

好的,为了支持IE,我们可以完全保留"expires"并可以使用它

document.cookie = "mtracker=somevalue; path=/";
Run Code Online (Sandbox Code Playgroud)

  • IE中的expires = 0根本没有设置cookie:http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/ (4认同)