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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

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

HTML

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

Q&A

解決済

2回答

931閲覧

アクセスした際に値をCookieに保存しページ内のリンクに付与したい

MeB

総合スコア104

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

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

HTML

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

0グッド

0クリップ

投稿2018/04/18 01:34

編集2018/04/18 02:20

例えば
http://example.com/cookie/?cookie_name=aaa&id=1&name=zzz
上記のようなURLにアクセスした際に
cookieにcookie_nameを保存する。
またページ内のリンクにそのクッキーの値を?cookie_name=aaaの形で
付与したいのですが、
まず下記のコードでcookieが保存されず止まっています。
アクセスした瞬間にはcookieは保存されないのでしょうか?
また、保存できた際はどのようにその値を取り出せばよいのでしょうか?

ご教示よろしくおねがいします。

php

1//setCookie 2 $cookie_name = filter_input(INPUT_GET,"cookie_name"); 3 if($cookie_name){ 4 if(!isset($HTTP_COOKIE_VARS['cookie_name'])){ 5 $host_name = ".".$_SERVER['SERVER_NAME']; 6 setcookie ('cookie',$cookie_name,time()+60*60*24*60,"/",$host_name,0); 7 } 8 }

追記
PHPバージョン: 5.6.32

リンクに関しては

html

1<a href="http://example.com/link/[ここにcookieの値を入れたい]">リンク</a>

http://example.com/cookie/?cookie_name=aaa&id=1&name=zzz
上記のURLであれば
http://example.com/link/?cookie_name=aaa

http://example.com/cookie/?cookie_name=121314&id=1&name=zzz
上記のURLであれば
http://example.com/link/?cookie_name=121314

のように何が来ても取れるようにしたいです。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/04/18 01:47

「止まる」とは?「保存されない」確認はどのようにとられたのでしょうか?
MeB

2018/04/18 01:51

失礼しました。「止まる」とは作業が進まないといういみでした。cookieの確認はChromeのデベロッパーツールでapplicationタブのCookiesで確認しました。
MeB

2018/04/18 01:54

ありがとうございます。$_COOKIEに変更します。
m.ts10806

2018/04/18 01:56

閉じかっこ } が1つ多いですが、何かもう1つ外に処理がありますか?
m.ts10806

2018/04/18 02:02

タイトル部分の「リンクに付与したい」というところが質問本文で言及されていませんが、これはどうしたいのでしょうか?
MeB

2018/04/18 02:05

閉じカッコはコピーの際のミスです。外に処理はありません。リンク部分も追記します。
MeB

2018/04/18 02:19

失礼しました。変更します。
guest

回答2

0

ベストアンサー

引数の値がおかしいです。

php

1$host_name = ".".$_SERVER['SERVER_NAME']; 2 34 5$host_name = $_SERVER['SERVER_NAME'];

「domain」にあたる部分ですが、
example.com としたら .example.com という値が渡されることになります。
そのようなドメインではないですよね。

また、setcookie()の第1引数はクッキー名称です。
現在のコードだと「cookie」という名前で指定していますね。

php

1setcookie ('cookie',$cookie_name,time()+60*60*24*60,"/",$host_name,0);

ですが、

php

1if(!isset($HTTP_COOKIE_VARS['cookie_name'])){

とチェックしているため、cookie_nameという名称のCookieが存在しないので、
毎回同じ名前のcookieを上書きし続けているような現象が起きています。
そもそもこのisset()によるifの分岐は必要でしょうか?

それぞれのコードが意図を持って書かれたのかかなり疑問です。

私の方ではcookie.jsを利用しまして、下記のようなコードで動作確認をとりました。

php

1<?php 2//setCookie 3$cookie_name = filter_input(INPUT_GET,"cookie_name"); 4if($cookie_name){ 5 if(!isset($_COOKIE['test'])){ 6 $host_name = $_SERVER['SERVER_NAME']; 7 setcookie('test', $cookie_name, time()+60*60*24*60,"/",$host_name,0); 8 } 9} 10?> 11<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 12<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 13<script> 14$(function(){ 15 console.log($.cookie("test")); 16}); 17</script>

これで?cookie_name=hogehoge
とアクセスしたらブラウザ開発ツールのコンソールに「hogehoge」という情報が表示されたので正常にcookieが保管されたということになります。

蛇足

setcookieに関する考察が書かれている記事を置いておきます、ぜひご一読のうえ、今後の開発にお役立てください。

投稿2018/04/18 02:19

編集2018/04/18 02:24
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MeB

2018/04/18 02:29

ご指摘含めありがとうございます。 cookie.jsはconsoleに表示する際に必要なのでしょうか? cookie自体はcookie.jsを使わなくても取れていると言う認識で大丈夫でしょうか?
MeB

2018/04/18 02:32

すみません。 リンクに付与する際にはcookie.jsは必要なのでしょうか?
m.ts10806

2018/04/18 02:36

蛇足に追加した記事にあります。 > JavaScriptでCookieの取り扱いは面倒なので、jquery.cookie等を使わないとやってられません。 もちろん、裏ではjavascriptが動いてはいるのですが、楽に扱えるのでcookiejsを利用しています。 ちょっとうろ覚えですが、cookieに保存したからとすぐにPHPで参照できるわけではありません。確か非同期だったか、タイムラグがあるので保存したcookieをPHPで参照できるのは実質次のアクセスからと思っていても良いかもしれません(未確認) setcookie("test","aaa")直後に$_COOKIE["test"]としても何も表示されないと思います。 そのためPHPでcookieを保存して即座に利用したい場合はjavascriptを利用することになります。画面出力後(正確にはHTMLレンダリング後)なので確実に扱えるようになっている、ということです。
MeB

2018/04/18 02:46

ご回答ありがとうございます。 そうなりますとアクセス時にリンクに値を付与する際はcookie.jsを利用するしかないとおもうのですが、 リンクに値を表示は可能なのでしょうか? なんどもすみません。宜しくお願いします。
m.ts10806

2018/04/18 02:48

javascriptでCookie取得後、javascriptでhrefの値を書き換えればよいかと。
guest

0

$host_name = ".".$_SERVER['SERVER_NAME'];
⇒ $host_name = $_SERVER['HTTP_HOST'];

へ変更してみてはいかがでしょうか。

$_SERVER['SERVER_NAME'] の値が、www.test.com ではなく、別名が設定されており異なるドメインに対してCookieを登録しようとしているため、www.test.comドメインでCookieが参照できない状態になっているのでは、と予想します。
$host_name = $_SERVER['HTTP_HOST'] ですとhttpリクエストのホスト名なので、”www.test.com”が返却されるはずです。

※補足
$HTTP_COOKIE_VARS は非推奨のため、推奨の$_COOKIEにしたほうが良いと思います。

投稿2018/04/18 02:49

shu_otsuka

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問