アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは、お世話になっております。
事あるたびに投函しているようで恐縮なのですが、調べてもその原因がわからず、皆様のアドバイスを頂戴できればと投函させて頂きます。

下記のソースは、ログイン認証時のものですが、ID、パスワードを入力時、次回より自動ログインにチェックを入れたかの分別によりクッキーを送信する内容を変えているものです。

しかしながら、チェックを入れたときは無事クッキーがセットされるのですが、チェックを入れないときはクッキーがセットされません。

お忙しい中恐縮ですが、ソースの誤りはもちろん、クッキーがセットされないポイントなど御座いましたら、アドバイスいただければ幸いに思います。宜しくお願い致します。


$addr = $_SERVER['REMOTE_ADDR'];
if($check == "auto"){//自動ログインにチェックを入れた場合
setcookie("addr", $addr, time() + 60*60*24*30, "/");
setcookie("key_no", $key_no, time() + 60*60*24*30, "/");
}
else{//チェックなし。ブラウザを閉じるとクッキーを無効
setcookie("login", $addr, 0, "/");
setcookie("key_no", $key_no, 0, "/");
}

A 回答 (5件)

多分、クッキーとセッションの組み合わせが良いのではないでしょうか?



私も、最近になってセッションを使い始めたので詳しいことは判りませんが・・・
    • good
    • 0
この回答へのお礼

NickAomori様

こんにちは。お返事が遅くなって申し訳ありません。
解決までには至っておりませんが、(もう少し自分でも調べつつ・・)少し様子を見てみようかと思います。
色々とご指導いただき有難う御座いました。今回のやり取りの中で、少しは(自分的には大分!)理解出来たかと思います。

お礼日時:2007/05/12 12:50

$addr = $_SERVER['REMOTE_ADDR'];


if($check == "auto"){//自動ログインにチェックを入れた場合
setcookie("addr", $addr, time() + 60*60*24*30, "/");
setcookie("login", '', time() + 60*60*24*30, "/");
setcookie("key_no", $key_no, time() + 60*60*24*30, "/");
}
else{//チェックなし。ブラウザを閉じるとクッキーを無効
setcookie("addr", 'NG', time() + 60*60*24*30, "/");
setcookie("login", 'NG', time() + 60*60*24*30, "/");
setcookie("key_no", 'NG', time() + 60*60*24*30, "/");
}

ソースを上記のように変更してみては、いかがでしょうか?
これでチェックしない場合も、各クッキーに'NG'が書き込まれるはずですよね?

書き込まれないので有れば、それ以外の原因です。

チェックの場合は、addrに値,loginは空欄,key_noに値
未チェックの場合は、addrに値,loginは値,key_noに値
 が書き込まれるのが正常な動作なのでしょうか?
    • good
    • 0
この回答へのお礼

NickAomori様

こんばんは。お付き合いいただき有難う御座います。
只今、ご指導いただいた内容で試したところ、無事クッキーをセットすることが出来ました。

しかしながら、チェックを入れない場合は、「ブラウザを閉じたらクッキーを無効に・・」という事を踏まえ、time() + 60*60*24*30,を
time()-100や、0とするとセットされないのです。
time()+60*3であれば、セットされるものの、時間の経過と共に、当然クッキーが無効となってしまいます。

今回の設定は、ブラウザを閉じたらクッキーを無効(削除?)にしたく、その理由とは、ログイン認証した者はログアウトするまで新しいブラウザを開いてもログインを継続させたい、といった考えから出てきた内容です。

些か当初の質問に言葉足らずなところが御座いましたが、ブラウザを閉じるまでクッキーを有効にする、という設定は、有効期限の箇所を、0 にすれば宜しいのですよね?でも何故かクッキーがセットされません。
time() + 60*60*24*30 だとセットされるのですが・・・。

幾度の渡るアドバイスに感謝しております。

お礼日時:2007/05/02 21:51

何度もすみません。

以下の様に変更してはいかがですか?
$addr = $_SERVER['REMOTE_ADDR'];
if($check == "auto"){//自動ログインにチェックを入れた場合
setcookie("addr", $addr, time() + 60*60*24*30, "/");
setcookie("key_no", $key_no, time() + 60*60*24*30, "/");
}
else{//チェックなし。ブラウザを閉じるとクッキーを無効
setcookie("login", $addr, time()-100, "/");
setcookie("key_no", $key_no, time()-100, "/");
}
    • good
    • 0
この回答へのお礼

NickAomori 様

こんばんは。何度も有難う御座います。
只今、time()-100に変更してみましたが、クッキーはセットされないようです。
また、同じ名前login→addrでも行ってみましたが、これもセットされないようです。
チェックを入れないとクッキーがセットされない状況になっています。

度重なるご指導、感謝いたします。

お礼日時:2007/05/01 23:18

>しかしながら、チェックを入れたときは無事クッキーがセットされるのですが、チェックを入れないときはクッキーがセットされません。


どのクッキー名にセットされないのでしょうか?
セットされないとは、値が入らない?値が空にならない?のどちらでしょうか?

ソースから、私が考えると
チェックがあれば、以下のクッキーに書込
addr に $addr
key_no に $key_no
をセットし、30日間

チェックがなければ、以下のクッキーを無効
login に$addr
key_no に $key_no
 (addrのクッキ名ーがないですよね?addrは一度セットされてしまっていれば、30日間は有効のままですよね?、ここかな?)

クッキーがチェック有りと、チェック無しでクッキー名前が違うのですが、それですか?

あと、クッキーを無効にするので有れば、有効期限を0にすれば良いです。
    • good
    • 0
この回答へのお礼

NickAomori 様

こんにちは。お忙しい中、早速のお返事有難う御座います。

>ソースから、私が考えると......

仰る通りです。クッキーの名前が違うのはあえてそうしているのですが、
チェックがあった場合30日間有効で、もう一方は仮に1人の方が違うIDを
持っていた場合、新たにブラウザを立ち上げた場合、ログイン中に他の
IDでログインしないようするための処置として設定いたしました。

テストで状況確認は30日間有効のチェックを削除(ログアウト)して
行っているので、チェックのあった場合のクッキーはない状態で確認しています。

NickAomori様のアドバイスを察すると、キックーは同じ名前でセットすべきなのでしょうか・・。

お礼日時:2007/05/01 15:58

setcookie("login", $addr, 0, "/");


setcookie("key_no", $key_no, 0, "/");

クッキーの有効期限が0だからじゃないですか?
setcookie("login", $addr, time() + 60*60*24*30, "/");
setcookie("key_no", $key_no, time() + 60*60*24*30, "/");
としたらどうですか?
    • good
    • 0
この回答へのお礼

NickAomori様

はじめまして、おはよう御座います。
休み明けの朝のご回答、ありがとう御座います。

>クッキーの有効期限が0だからじゃないですか?

最初、この設定で躓いていたのですが、この有効期限を0にしているのは、ブラウザを閉じたらクッキーを無効としたいための処置としています。
ブラウザを閉じたら無効にするための記述は違うのでしょうか?
色々と調べて居てはいるものの、無効にするには有効期限を省略と説明があるものの、そのあとのパスの指定もあるので、あえて0として記述しています。

お礼日時:2007/05/01 09:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!