if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
-42000が何を指しているのか、
どれが関数で、
()が空白な理由など、
素人の質問ですみませんが宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
質問に書かれているのは、セッションクッキーを削除するためのコードです。
クッキーというのはブラウザ側にセッションに関する情報を保存するもので、それぞれが有効期限の情報を持っています。クッキーの削除は、有効期限を既に過ぎた日時に設定することで行います。
有効期限を過ぎたクッキーは、ブラウザが定期的に削除してくれます。
関数は、関数名(引数) の形をしていますから、(と)の対応付けをすれば関数を見つける事は難しくありません。
コードで使われているPHP関数は出現順に、ini_get、session_get_cookie_params、setcookie、session_name、time の5つです。
ini_getは設定オプションの値を得る関数で、ini_get("session.use_cookies") でセッションがクッキーを使用するように設定されているか否かが得られます。
session_get_cookie_paramsはクッキーのパラメータを得る関数です。返り値はマップ型で、キー("path"等)とその値の関連付けが得られます。
setcookieは、クッキーを設定する関数です。
・最初の引数がクッキーの名前で、クッキーを特定しするのに使われます。その名前のクッキーが既にあれば、そのクッキーが書き換えられます。その名前のクッキーが無ければ、新たにクッキーが作られます。
・2つ目の引数が有効期限で、unix時間(1979年1月1日0時0分0秒からの経過秒数)で指定します。
session_nameは、セッションの名前(クッキーの名前として使われる)を得る関数です。
timeは、その時のUnix時間を得る関数です。
こうした事を理解して頂いて、コードを説明すると以下のようになります。
(説明は、コメント(//で始まる行)としてコードに入れてあります。
lang
1if (ini_get("session.use_cookies")) { 2// クッキーを使う設定なら、以下を実行します。 3// クッキーを使わない設定なら、削除すべきクッキーが無いので何もせずに終わります。 4 $params = session_get_cookie_params(); 5// クッキーのパラメータを得ます。 6 setcookie(session_name(), '', time() - 42000, 7 $params["path"], $params["domain"], 8 $params["secure"], $params["httponly"] 9 ); 10// クッキーを設定します。 11// ・1つ目の引数はクッキー名(セッション名)で、session_name関数で得た値を使います。 12// ・2つ目の引数は有効期限で、time()で得た今の時間から、42000を引くことで既に過ぎた時間にしています。 -42000は、42000秒前を意味しますが -42000に特に意味はありません。 13// 良く使われるのは、-60(1分前)、-3600(1時間前)、-43200(12時間前)とかで、-42000というのは初めて見ました。ひょっとすると、元々は-43200だったものが使いまわしされる過程で-42000と誤記されたのかもしれません。 14// -60でも、-42000でも、既に過ぎた時間になる点は同じなので、コードが実行された際の効果に違いはありません。 15// 3つ目以降の引数は、既存のクッキーのパラメータと同じ値にしています(session_get_cookie_paramsで得たマップから、各パラメータの値を得ています) 16}
参考情報)
ちなみに、http://php.net/manual/ja/function.session-destroy.php では、このコードの前にセッション変数を全て解除する部分があり、コードの後にセッションを破壊する部分が続きます。
投稿2015/05/29 04:24
総合スコア6915
0
セッションクッキーは全く使ったことがなかったので初めてマニュアルで見ましたが、次の様な感じなのだと思います。
私自身PHP(というよりはプログラム全般)にはまだそれほど詳しくなく、正確ではないかもしれないので「大体こんな感じなのかな」という程度に見ておいて下さい。
lang
1// もしもphp.iniの設定で session.use_cookies が有効であったら処理を実行 2if (ini_get("session.use_cookies")) { 3 // 変数 $params にセッションクッキーのパラメータが格納された配列を取得する関数 session_get_cookie_params() を代入 4 $params = session_get_cookie_params(); 5 6 // setcookie() はクッキーを設定(送信)する関数。それぞれの引数は下記で説明 7 setcookie(session_name(), '', time() - 42000, 8 $params["path"], $params["domain"], 9 $params["secure"], $params["httponly"] 10 ); 11 12 /* 13 * setcookie() の引数の設定 14 * 15 * 第一引数 session_name() セッションIDを設定する引数。破棄するので何も指定しない 16 * 第二引数 '', セッションIDの値を設定する引数。破棄するので空の文字列になっている 17 * 第三引数 クッキーの有効期限を指定する引数。関数 time() で指定 18 * ここではクッキーを無効にするために負の値を指定している 19 * 値が-42000である事には特に重要ではなく、負の値である事が重要 20 * 第四引数 セッションのパラメータを指定する引数。 21 * ここでは変数 $params に代入された関数 session_get_cookie_params() の配列からそれぞれを呼び出している 22 * - path クッキーが保存されている場所のパス 23 * - domain クッキーが有効になるドメイン 24 * - secure セキュアな接続でのみクッキーを送信する 25 * - httpsonly HTTPSを通してのみアクセスを可能にする 26 */ 27}
関数名( 引数 ); という形を取るもの(ここでは ini_get() や setcookie() や time() など )は大体関数と見て良いと思います。
関数によっては引数がないものもあります。
分からない時は「言語名 関数名らしきもの」(例えば「PHP setcookie」など)で検索したりT.Mmiuraさんの回答にあるPHPのマニュアルを見るとそれが何かを理解しやすいです。
マニュアルを見ながら同時に検索もしてみるとぐっと理解が進むと思いますので、ぜひ活用してみてください。
あとはこのような学習サイトを活用するのも良いと思います。
PHP入門(基本編) (全32回) - プログラミングならドットインストール
投稿2015/05/29 03:11
編集2015/05/29 03:40総合スコア617
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
http://php.net/manual/ja/function.session-destroy.php
こちらに詳しい説明があります。
クライアント側にあるcookieを含むSESSION変数をすべて破棄する場合のやり方です。
投稿2015/05/28 09:23
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。