質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3161閲覧

jQueryでsetCookieが正常に動作しない

1nakaji

総合スコア187

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2015/11/29 14:10

編集2015/11/30 03:23

現在、Webアプリケーションを作成しています。

「jquery.cookie.js」というライブラリを使用して、
クッキーの読み書きをしています。

$.setCookie()でCookieをセットする場合、

━━━━━━━━━━━━━━━━━━
$.setCookie("test1","example1");
$.setCookie("test2","example2");
$.setCookie("test3","example3");
location.href = "example.html";
━━━━━━━━━━━━━━━━━━

のように処理させると、
Cookieの値が正常にセットされません。

どうやらlocation.hrefをコメントアウトすると、
正常にCookieがセットされるようです。

Cookieの書き込みが処理される前に、
location.hrefが実行されるからかと思い、
「jdeferred」を使ってみましたが、
どうもうまくいく場合とうまくいかない場合があるようです。

━━━━━━━━━━━━━━━━━━
setCookie( "test1", "example1" ).then(function(){
setCookie( "test2", "example2" ).then(function(){
setCookie( "test3", "example3" ).then(function(){

location.href = "example.html"; }, function(e){ }) }, function(e){ })

}, function(e){ });

function setCookie( key, value ){
var d = new $.Deferred;

$.cookie( key, value, { expires: 365 });

d.resolve(); return d.promise();

}
━━━━━━━━━━━━━━━━━━

ちなみに無理やり3秒待機させてから
location.hrefを実行すると正常に動作していました。

━━━━━━━━━━━━━━━━━━
$.setCookie("test1","example1");
$.setCookie("test2","example2");
$.setCookie("test3","example3");

$(function(){
setTimeout(function(){
location.href = "example.html";
},3000);
});
━━━━━━━━━━━━━━━━━━

原因がよくつかめていないです。

無理やり3秒待機させてからページ遷移というのは、
よいやり方ではないですよね?
(現場でこういう無理やりな処理書いたりするんでしょうか)

原因と対策がわかる方おりましたら、
アドバイスしていただけますと幸いです。

よろしくお願いいたします。

追伸:
どうも3秒待機でもうまくいくわけではないようです。
何度か試しましたが、ダメでした。

追記:
修正依頼でいただいたsetCookieメソッドを記載します。

var Cookie = (function() {

var Cookie = function() { }; var p = Cookie.prototype; p.setCookie = function( key, val ){ $.cookie( key, val, { expires: 365 }); //有効期限1年間 }; p.getCookie = function( key ){ return $.cookie( key ); }; return Cookie;

})();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2015/11/30 01:51

「jquery.cookie.js」というライブラリはどこにありますか。ググったところここ( https://github.com/carhartl/jquery-cookie )にたどり着いたのですが、$.setCookie というメソッドがなさそうでした。独自に拡張をされているのでしたら、その部分のコードもご提示お願いします。
1nakaji

2015/11/30 03:22

ご回答ありがとうございます。 ライブラリはそちらで間違いございません。 setCookieメソッドは申し訳ないです。 自分で作ったのと混同しておりました。 以下のようなメソッドです。 var Cookie = (function() { var Cookie = function() { }; var p = Cookie.prototype; p.setCookie = function( key, val ){ $.cookie( key, val, { expires: 365 }); //有効期限1年間 }; p.getCookie = function( key ){ return $.cookie( key ); }; return Cookie; })(); また色々調べていて分かったのですが、 どうもプラットフォーム的な問題がある かもしれません。 Webアプリケーションと記載しましたが、 実際はwebviewを使ったハイブリッドアプリになります。 WebViewへのCookie埋め込みは 時間がかかるというあいまいな情報がネットにあったり、 もしかするとそれにはまっている可能性もあるなと。 http://dagezi.hatenablog.com/entry/2014/05/22/150037 ハイブリッドアプリで使っているのは、 以下のプラットッフォームです。 http://www.applican.com/ もし何かわかることがあれば、 教えていただけますと幸いです。
guest

回答1

0

自己解決

自己解決しました。

http://dagezi.hatenablog.com/entry/2014/05/22/150037
こちらの記事の通りだったようです。

どうもWebviewでのCookie永続化は多少時間がかかるようです。

Cookieが永続化する前にアプリを終了させてしまうと、
書きこんだCookieが消えてしまうようです。

バックグラウンドでもいいので、
数十秒程度アプリを起動した状態にしておくことで、
Cookieが永続化することを確認できました。

どはまりしてしまいましたが、
ひとまず解決したのでよかったです。

投稿2015/12/01 09:23

1nakaji

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問