クッキーの有効期限をセッション終了時に変更

[新着] Webテンプレートを仮オープンしました



0   名前: mimi : 2006/09/08(金) 10:28  ID:uxNMFZte
下記のスクリプトで、クッキーの保存の有効期限を、
セッション終了時に変更したいのですが、
いろいろ試したのですが、時間の箇所の削除する場所が悪いのか、
うまく動作いたしません。
どなたかご教授お願いいたします。


exp=new Date();
exp.setTime(exp.getTime()+1000*60*60*24);

var no = 'hogehoge';
var itemname= '0';
setCookie(no,'0',exp);

function setCookie(key, val, val_exp,tmp) {
tmp = key + "=" + escape(val) + "; ";
tmp += "path=/;";
tmp += "expires= " + val_exp.toGMTString(); + "; ";

document.cookie = tmp;

1   名前: sevi- : 2006/09/08(金) 10:28  ID:PQukhZTw
取りあえずsetCookie関数の処理で妙に思った箇所を挙げてみる.

function setCookie(key, val, val_exp,tmp)
{
 tmp = key + "=" + escape(val) + "; ";
 tmp += "path=/;";
 tmp += "expires= " + val_exp.toGMTString(); + "; ";
 document.cookie = tmp;
}


・まず4番目の引数にtmpが設定されているにもかかわらず,一行目の処理で初期化されてしまっている.
恐らくtmp引数にはその他の設定項目が設けられる仕様になっていた筈なので,
処理内容とつじつまが合わない.
・三行目の処理で式の間にセミコロンが記述されている為,最後尾の + "; "がtmpに追加されなくなっている.
(最後尾なので特に影響はないかもしれないが)

修正をしてみると以下のようになる.

function setCookie(key, val, val_exp, tmp)
{
 if(tmp == null)
  tmp = "";
 tmp += key + "=" + escape(val) + "; ";
 tmp += "path=/;";
 tmp += "expires= " + val_exp.toGMTString() + "; ";
 document.cookie = tmp;
}



蛇足で気になった点:
・pathの設定が/となっているが,これだとドメイン以下に配置された全てのページで値が取得できるようになるが,
本当にそれで問題ないか.

2   名前: mimi : 2006/09/08(金) 10:28  ID:uxNMFZte
sevi- さん

ご指摘どうもありがとうございます!
参考にさせていただいたきます!!

時間の設定expiresをいれないと、
有効期限がセッション終了時に消えるというのを調べて、
下記の部分を削除してもエラーがでてしまいます。
tmp += "expires= " + val_exp.toGMTString(); + "; "; 

何か方法はございますでしょうか?


3   名前: sevi- : 2006/09/08(金) 10:28  ID:PQukhZTw
方法って言うか,提出されたコードだけではこれ以上検証不能と思われる.
なので,全文もしくは問題発生の事象が実際動かし確認できるサンプルコードを寄越したまえ.

ところでブラウザの設定でcookieを無効にしてないかもチェックした方が良い.

4   名前: mimi : 2006/09/08(金) 10:28  ID:uxNMFZte
sevi- さん
ありがとうございます。

>方法って言うか,提出されたコードだけではこれ以上検証不能と思われる.
>なので,全文もしくは問題発生の事象が実際動かし確認できるサンプルコードを寄越したまえ.
その通りですよね、もうしわけございません。。
下記のものが、確認のできるサンプルコードになります。
HTMLをよみこんだときに、任意の値の入った、
クッキーが保存されるものです。

>ところでブラウザの設定でcookieを無効にしてないかもチェックした方が良い.
こちら確認したところ、ちゃんとよみこまれているようです。
またご教授いただけたらと思います!
よろしくお願いいたします。

<html>
<head>
<SCRIPT language=JavaScript>
<!--
function save(){

exp=new Date();
exp.setTime(exp.getTime()+1000*60*60*24);

var no = 'hogehoge';
var itemname= '0';
setCookie(no,'0',exp);

function setCookie(key, val, val_exp, tmp)
{
if(tmp == null)
tmp = "";
tmp += key + "=" + escape(val) + "; ";
tmp += "path=/;";
tmp += "expires= " + val_exp.toGMTString() + "; ";
document.cookie = tmp;
}
}
// -->
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000" onLoad="save();">
略です。
</body>
</html>

5   名前: sevi- : 2006/09/08(金) 10:28  ID:9J5RKOHs
検証したが,ちゃんと動作している.

念の為期待する動作内容を教えて頂きたい.
コードを見る限り,文書読み込み完了時にhogehoge="0"という内容を設定した瞬間より1日後迄の有効期限で
クッキーへ保存する動作になっているのだが.

6   名前: 神崎 : 2006/09/08(金) 10:28  ID:9Eg6J53r
期待する動作が
> No.0
> 下記のスクリプトで、クッキーの保存の有効期限を、
> セッション終了時に変更したいのですが、
だとすると、
> tmp += "expires= " + val_exp.toGMTString() + "; ";
この行をコメントアウトするなり分岐させるなりして、expiresを入れないようにしておく必要があります。


> No.2
> 下記の部分を削除してもエラーがでてしまいます。
と書かれていますが、エラーの内容はどの様な物ですか?

7   名前: mimi : 2006/09/08(金) 10:28  ID:uxNMFZte
sevi- さん、神崎さん

ありがとうございます!
再度、> tmp += "expires= " + val_exp.toGMTString() + "; ";の
箇所をコメントアウトして、検証したところ問題なく動作いたしました!

本当にありがとうございました!!

一覧へ戻る