Javascriptを使用したセッションのみのCookie


84

JavascriptでセッションのみのCookieを作成できるかどうか疑問に思いました。ブラウザを閉じたら、Cookieを削除する必要があります。

WebサイトはHTMLのみであるため、サーバー上では何も使用できません...したがって、サーバー側スクリプトは使用されません。

私はここでこれについて何かを読みました:http//blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/ しかし、私はこれについてこれ以上の情報を見つけることができません...だから私はこの方法が信頼できるかどうか疑問に思います。

回答:


136

はい、その通りです。

入れていないexpires、それがJavaScriptでまたはサーバー上に作成されているかどうかの部分では、セッションクッキーを作成します。

https://stackoverflow.com/a/532660/1901857を参照してください


それは私にとってはうまくいかず、多くの方法で試しました...多分この答えは時代遅れです。
ダン

設定が有効になっている場合、@ DanセッションCookieは機能しません:ブラウザで「中断したところから続行してください」。その場合、ブラウザは閉じた後にセッションCookieを破棄しません。
TaronSaribekyan20年

@TaronSaribekyanあなたは正しいですが、あなたはあなたのウェブサイトのすべてのユーザーに設定「あなたが中断したところから続ける」を無効にするように頼まなければなりません。代わりに、sessionStorageはすべてのブラウザーですぐに機能しました。
ダン

50

より簡単な解決策は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']);

ページセッションは、ブラウザが開いている限り続き、ページのリロードと復元を超えて存続します。新しいタブまたはウィンドウでページを開くと、新しいセッションが開始されます。

したがって、ページ/タブを閉じると、データは失われます。


1
はい、セッションストレージはこのユースケースに最適です。
Julien Lafont 2013年

11
実際、今はセッションストレージを使用しています...しかし、ChromeとFirefoxで新しいタブを開くと、セッションストレージに保存したものにアクセスできないようです...そのため、セッションCookie:コードを
Daan Poron 2013年

その場合、Cookieは信頼できるはずですが、どの程度サポートされているかはわかりません。
Cerbrus 2013年

2
セッション(およびローカル)ストレージは同一生成元ポリシーの影響を受けるため、httpからhttpsに切り替えると、http(およびその逆)に保存されているものにアクセスできなくなります
Jeff Lowery

2
サーバー側でこれらの値にアクセスできないソリューションSessionStorageのみを提供すると思いますclient-only。ASP.NetやPHPなどの多くのサーバー側フレームワークでは、非表示フィールドなどを使用せずに保存したクライアント側の値に簡単にアクセスしたいと考えています。Cookieは自動的にに送信されるため、Cookieの方が優れたソリューションになります。サーバ側。
Sunil 2015年

9

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

4
IEのexpires = 0はCookieをまったく設定しません: blog.lysender.com/2011/08/...
JDandChips

1
expires = ""はIEで機能し、明示的に設定した場合はCookieの有効期限をSessionにリセットできます
koolunix 2017年

1

セットアップセッション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');
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.