ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   Flex Builder 3
     クッキーの取得について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
bobo
投稿日時: 2009-4-22 13:08
ご主人様
登録日: 2008-10-28
居住地:
投稿: 235
クッキーの取得について
こんにちは。

Flex3を使ってます。現在、Webと通信するプログラムを作っているんですが、ある一定の使用(ボタンクリック)を確認したら、その日はこのユーザは操作不能になる(ボタンを押せなくなる)。

こんな概要で実現したいのですが、ユーザのこの使用頻度はサーバでは管理せず、クライアント側に任せようと考えてます。

そうするCookieぐらいしか思いつかないのですが、Cookieの取得がActionScript3.0でできるかもわからない初心者です。

お分かりになりましたら、よろしくお願いします。
また、クロスブラウザ対応で、(IE6+ & FF3+ & Safari3)辺りで動作しなければいけないのですが、Flash自体このHTTP関連は脆弱な気がしていまして、他の方法がありましたら、ぜひご教授くださいませ。

(Cookieクリアは目をつぶる仕様です)

よろしくお願いします。
gemini
投稿日時: 2009-4-22 13:48
お馴染みさん
登録日: 2009-4-19
居住地: 神奈川
投稿: 11
Re: クッキーの取得について
はじめまして。

Cookieの取得ではないですが、
SharedObjectを使って、その日のクリック数を管理する方法はいかがでしょうか。
bobo
投稿日時: 2009-4-22 15:59
ご主人様
登録日: 2008-10-28
居住地:
投稿: 235
Re: クッキーの取得について
ありがとうございます。

こちらの過去ログにもあり、こちらを実装してうまく行ってます!
ただ・・、やはり互換性を考えて、Cookieで実装して欲しいとの事・・。

WEBで調べてもこのSharedObjectを進められてるものばかりですね。
確かにブラウザにも依存しないようなので、こちらの方が安全のような気もしますが・・。

せっかく教えていただいたのに申し訳ありません。お分かりになる方ございましたら、よろしくお願いします。
gemini
投稿日時: 2009-4-22 16:18
お馴染みさん
登録日: 2009-4-19
居住地: 神奈川
投稿: 11
Re: クッキーの取得について
ちょっとだけ調べてみましたが、こういうのがありました。

http://myflex.wordpress.com/2008/11/12/actionscript-cookie-util/

Javascriptで取ったCookieを、ExternalInterfaceを経由してFlexに渡してるっぽいです。

私は試してませんが、まだ何も解決策が無いのであれば、
こちらを試してみてはいかがでしょうか。
Odakaz
投稿日時: 2009-4-22 17:49
ご主人様
登録日: 2008-3-11
居住地: リアル:神奈川県/バーチャル:ウィンダス
投稿: 358
Re: クッキーの取得について
AIRで、あるサイト向けのアクセサリのアプリを作ったことがあります。
そのサイトでもCookieを利用していましたが、普通にURLLoaderとURLRequestでCookieを保持できました。
ただ、Cookieの操作は無理かもしれません。


----------------

bobo
投稿日時: 2009-4-22 21:02
ご主人様
登録日: 2008-10-28
居住地:
投稿: 235
Re: クッキーの取得について
Odakazさん、ありがとうございます。

貴重な情報ありがとうございます。
私が現在行おうとしているのは、Cookieにその日の使用回数をカウントアップすると言うもので、やはり操作できないと実現できないように思います。

geminiさん、ありがとうございます。

教えていただいた方法で、なるほどと思い、実装してみました。
ただ、ChromeがCookieをセットしてくれず、思うように実現できていません。

Flashと言うよりjavascriptの問題です(Scriptへ値の受け渡しは全てのブラウザで確認しました)が、お分かりになりますでしょうか?

@Script部(Cookieのセット・取得)
function setCookie(oObject) {
//_cname,_cvalue,_exday
	var dmy = '';
	for (var i in oObject) {
		dmy += oObject[i];
	}
	var _cname = dmy.split(",")[0];
	var _cvalue = dmy.split(",")[1];
	var _exday = 30;

		_exday = eval(_exday);
		var setDay = new Date();
		setDay.setTime(setDay.getTime()+(_exday*1000*60*60*24));
		var _expday = setDay.toGMTString();
		document.cookie = _cname + "="+escape(_cvalue)+";expires="+_expday+";path=/";
alert(document.cookie);
		return true;

}
function getCookie(oObject) {
	var _cname = '';
	for (var i in oObject) {
		_cname += oObject[i];
	}
	_cname += "=";
	_cookie = document.cookie+";";
	_start = _cookie.indexOf(_cname);
	if (_start != -1) {
		_end = _cookie.indexOf(";",_start);
		return unescape(_cookie.substring(_start+_cname.length,_end));
	}
	return "";
}


@FlashScript受け渡し部

		//本日のカウントチェック
		private function chkCount(): Boolean {
       		var returndata:String = "TestKEY";
			var oObject:Object = {src:returndata};
			var cookiedata:String = ExternalInterface.call("getCookie", oObject).toString();

			var date_obj:Date = new Date();
			if(!cookiedata){
	       		var settdata:String = "TestKEY," + date_obj.getDate() + "-" +0;
				var oObject:Object = {src:settdata};
				ExternalInterface.call("setCookie", oObject);
				
			} else {
				var dmy:String = cookiedata;
				var dmy1:Number = new Number(dmy.substr(0, dmy.indexOf("-")));
				var dmy2:Number = new Number(dmy.substr(dmy.indexOf("-") + 1));
//Alert.show(new String(dmy2));
				if (dmy1 == date_obj.getDate() && dmy2 > 9) {
					return false;
				}
			}


/*
			var so:SharedObject = SharedObject.getLocal("Counter");
			
			var date_obj:Date = new Date();
			if(!so.data.counter){
				so.data.counter = date_obj.getDate() + "," +0;
			} else {
				var dmy:String = so.data.counter;
				var dmy1:Number = new Number(dmy.substr(0, dmy.indexOf(",")));
				var dmy2:Number = new Number(dmy.substr(dmy.indexOf(",") + 1));
trace(dmy2);
				if (dmy1 == date_obj.getDate() && dmy2 > 9) {
					return false;
				}
			}
			so.close();
*/
			return true;
		}
		//本日のカウントアップ
		private function chkCountUp(): Boolean {
			
       		var returndata:String = "TestKEY";
			var oObject:Object = {src:returndata};
			var cookiedata:String = ExternalInterface.call("getCookie", oObject).toString();

			var date_obj:Date = new Date();

			var dmy4:Number = new Number(cookiedata.substr(0, cookiedata.indexOf("-")));
			var dmy3:Number = new Number(cookiedata.substr(cookiedata.indexOf("-") + 1));
			if (dmy4 != date_obj.getDate()) {
				dmy3 = 0;
			}
			dmy3++;

       		var settdata:String = "TestKEY," + date_obj.getDate() + "-" +dmy3;
			var oObject:Object = {src:settdata};
			ExternalInterface.call("setCookie", oObject);

/*
			var so:SharedObject = SharedObject.getLocal("Counter");
			
			var date_obj:Date = new Date();
			
			var dmy4:Number = new Number(so.data.counter.substr(0, so.data.counter.indexOf(",")));
			var dmy3:Number = new Number(so.data.counter.substr(so.data.counter.indexOf(",") + 1));
			if (dmy4 != date_obj.getDate()) {
				dmy3 = 0;
			}
			dmy3++;
			so.data.counter = date_obj.getDate() + "," +dmy3;
			so.flush();
			so.close();
*/
			return true;
		}


しっかりSharedObjectは残してますが・・。こっちの方が絶対いいんですけどね・・。

よろしくお願いします!
gemini
投稿日時: 2009-4-22 21:56
お馴染みさん
登録日: 2009-4-19
居住地: 神奈川
投稿: 11
Re: クッキーの取得について
当方、JavascriptもChromeも詳しくありませんが、
Chromeだけ挙動が違う、とのことですので、
ぐぐってみると、以下のページがヒットしました

http://onefourhack.seesaa.net/article/114059111.html

リンク先の冒頭に、以下のような記述があります。
引用:

下記の内容で検証していますが、なぜかGoogle Chromeだけローカルで実行するとCookieが保存されないので、わざわざサーバにアップロードして実行した。
サーバ上で行わないとcookieは保存できない、という仕様でもあるのかな?


もしboboさんがローカルディスク上のHTML/SWFをChromeで開いているのだとしたら、
これと同じことが起こっていると思います。

キチンとサーバー上のHTML/SWFにHTTPでアクセスしているにもかかわらず、
上のような現象が起こっているのだとしたら、申し訳ありませんが、私には手が負えません。

期待させておいて、お力になれずにすみません。
bobo
投稿日時: 2009-4-22 22:55
ご主人様
登録日: 2008-10-28
居住地:
投稿: 235
Re: クッキーの取得について
geminiさん、調べていただいて恐縮です!

おっしゃるとおりでした。
Javascriptを出して確認してたんですが、サーバとしてでないといけないんですね、ChromeのCookie。

また、勉強になりました。本当にありがとうございました。
解決しました(それでも、SharedObject利用の方がお勧めですね)。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を