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

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

ただいまの
回答率

90.48%

  • PHP

    20912questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9328questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    4195questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

セッションに関するコードですが、解読できないので日本語訳をお願い致します。

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 868

b1ackc0ffee

score 197

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が何を指しているのか、
どれが関数で、
()が空白な理由など、
素人の質問ですみませんが宜しくお願い致します。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

http://php.net/manual/ja/function.session-destroy.php
こちらに詳しい説明があります。

クライアント側にあるcookieを含むSESSION変数をすべて破棄する場合のやり方です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/29 10:13

    有難うございます(^^)
    セッションを破棄するコードということは、わかるんですが、上記コードの和訳を知りたいです。
    それぞれが何に当たるのか、コードを見ただけで理解できません>_<

    キャンセル

0

セッションクッキーは全く使ったことがなかったので初めてマニュアルで見ましたが、次の様な感じなのだと思います。
私自身PHP(というよりはプログラム全般)にはまだそれほど詳しくなく、正確ではないかもしれないので「大体こんな感じなのかな」という程度に見ておいて下さい。

// もしもphp.iniの設定で session.use_cookies が有効であったら処理を実行
if (ini_get("session.use_cookies")) {
    // 変数 $params にセッションクッキーのパラメータが格納された配列を取得する関数 session_get_cookie_params() を代入
    $params = session_get_cookie_params();

    // setcookie() はクッキーを設定(送信)する関数。それぞれの引数は下記で説明
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"], 
        $params["secure"], $params["httponly"] 
    );

    /*
     * setcookie() の引数の設定
     *
     * 第一引数 session_name() セッションIDを設定する引数。破棄するので何も指定しない
     * 第二引数 '', セッションIDの値を設定する引数。破棄するので空の文字列になっている
     * 第三引数 クッキーの有効期限を指定する引数。関数 time() で指定
     *          ここではクッキーを無効にするために負の値を指定している
     *          値が-42000である事には特に重要ではなく、負の値である事が重要
     * 第四引数 セッションのパラメータを指定する引数。
     *          ここでは変数 $params に代入された関数 session_get_cookie_params() の配列からそれぞれを呼び出している
     *          - path       クッキーが保存されている場所のパス
     *          - domain     クッキーが有効になるドメイン
     *          - secure     セキュアな接続でのみクッキーを送信する
     *          - httpsonly  HTTPSを通してのみアクセスを可能にする
     */
}

関数名( 引数 ); という形を取るもの(ここでは ini_get() や setcookie() や time() など )は大体関数と見て良いと思います。
関数によっては引数がないものもあります。

分からない時は「言語名 関数名らしきもの」(例えば「PHP setcookie」など)で検索したりT.Mmiuraさんの回答にあるPHPのマニュアルを見るとそれが何かを理解しやすいです。
マニュアルを見ながら同時に検索もしてみるとぐっと理解が進むと思いますので、ぜひ活用してみてください。

あとはこのような学習サイトを活用するのも良いと思います。
PHP入門(基本編) (全32回) - プログラミングならドットインストール

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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時間を得る関数です。

こうした事を理解して頂いて、コードを説明すると以下のようになります。
(説明は、コメント(//で始まる行)としてコードに入れてあります。

if (ini_get("session.use_cookies")) { 
// クッキーを使う設定なら、以下を実行します。
// クッキーを使わない設定なら、削除すべきクッキーが無いので何もせずに終わります。
    $params = session_get_cookie_params(); 
// クッキーのパラメータを得ます。
    setcookie(session_name(), '', time() - 42000, 
        $params["path"], $params["domain"], 
        $params["secure"], $params["httponly"] 
    ); 
// クッキーを設定します。
// ・1つ目の引数はクッキー名(セッション名)で、session_name関数で得た値を使います。
// ・2つ目の引数は有効期限で、time()で得た今の時間から、42000を引くことで既に過ぎた時間にしています。 -42000は、42000秒前を意味しますが -42000に特に意味はありません。
// 良く使われるのは、-60(1分前)、-3600(1時間前)、-43200(12時間前)とかで、-42000というのは初めて見ました。ひょっとすると、元々は-43200だったものが使いまわしされる過程で-42000と誤記されたのかもしれません。
// -60でも、-42000でも、既に過ぎた時間になる点は同じなので、コードが実行された際の効果に違いはありません。
// 3つ目以降の引数は、既存のクッキーのパラメータと同じ値にしています(session_get_cookie_paramsで得たマップから、各パラメータの値を得ています)
} 

参考情報)
ちなみに、http://php.net/manual/ja/function.session-destroy.php では、このコードの前にセッション変数を全て解除する部分があり、コードの後にセッションを破壊する部分が続きます。


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20912questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9328questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    4195questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。