
いつもお世話になります。
Opera, Internet Explorer, Safari, Gecko (Firefox etc..)を
ターゲットにしたサイトをPHPで作ってます。
トップページにFLASHを使いました。
トップページの位置関係は、index.php > top.phpとなります。
index.phpには、トップページに移動するボタンがあります。
$_SERVER['HTTP_REFERER']を利用して、
http://www.xxx.jp/ または、http://www.xxx.jp/index.php
のどちらから来た場合しか、FLASHを表示させないようにしました。
$referer = $_SERVER['HTTP_REFERER'];
$href = htmlspecialchars($referer);
$check_href1 = 'http://www.xxx.jp/';
$check_href2 = 'http://www.xxx.jp/index.php';
$flash_flag = 0;
if($href == $check_href1 or $href == $check_href2){ $flash_flag++; }
if($flash_flag > 0){
FLASHを表示
}else{
違う画像やテキストを表示
}
ところが、SafariとFirefoxは、意図通り動作してくれるのですが、
肝心のIEや、Operaは、キャッシュが効いているせいなのか、
上手く動作してくれません。(違うページからTopに戻って
リロードすれば、リファイラが変化します)
前置きが長くなりましたが、どうしたら指定ページからのみ
1回だけ、FLASHを表示する事ができるのでしょうか。
アドバイス よろしくお願いします。
No.2ベストアンサー
- 回答日時:
waterclockさん、こんにちは。
> 2番目の方法がわからないので、よかったら教えて下さい。
session_start() でセッションを開始し、
session_destory() でセッションを破棄(終了)します。
破棄するタイミングを考えて行わないといけません。
また、注意が必要なのはsession_start()はheader()などと同じように
どんな出力よりも先に行わないといけないという点です。
「PHP セッション管理」 で検索すると詳しい情報が
得られると思います。
下記に例を書きます。
また、場合により全てのページでindex.phpと同じように
URLを保存する処理を入れる必要があるかもしれません。
index.php で
<?php
//ページ出力より先に行ってください。
//空白を出力していてもダメですし、タグを出力していてもダメです。
session_start();
//URLを保存する処理
$_SESSION['s_purl'] = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}";
?>
Flashページで
<?php
//ページ出力より先に行ってください。
//空白を出力していてもダメですし、タグを出力していてもダメです。
session_start();
// 方法1
if(($_SESSION['s_purl'] == "http://www.xxx.jp/") or
($_SESSION['s_purl'] == "http://www.xxx.jp/index.php")) {
/* FLASHを表示 */
} else {
/* 違う画像やテキストを表示 */
}
//方法2
//サイト内からならどのページからでもFlash表示
if(preg_match("/^http:\/\/www\.xxx\.jp\//i"), $_SESSION['s_purl']) {
/* FLASHを表示 */
} else {
/* 違う画像やテキストを表示 */
}
アドバイスのおかげで、いくつかの処理をして解決しました。
こちらの方が、クレバーですね。
また、これは使い道があり面白いですね。
どうも、ありがとうございました。またよろしくお願いします。
No.1
- 回答日時:
確かOperaは設定でリファイラをはかないように設定できます。
それにセキュリティソフトでリファイラがきられてしまう場合もあります。リファイラに、全く別の値を入れてわたすこともできますね。リファイラが取れる・取れないは閲覧者側の環境によるところが大きいので、スクリプト側ではどうにもできません。あまりリファイラの値に頼ったスクリプトは書かないほうがいいと思いますよ。
方法としては、いくつかあります。
1.index.phpからtop.phpへのボタン部分に
<input type="hidden" name="flash" values="1">
などとパラメータを渡して、それで判別する。
2.セッションにユーザーのサイト内の移動を記録させて、直前がinndex.phpならFlashを表示する。
1の方が簡単、2の方が確実ですかね。
この回答への補足
アドバイス、ありがとうございます。
取りあえず、GETでやりました。
2番目の方法がわからないので、よかったら教えて下さい。
お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
VB.NETのテキストボック...
-
カーソル移動と同時にデータを...
-
宮迫のフライデー、誰がリーク...
-
携帯でのカウント
-
word
-
「テキストデータで送ってくだ...
-
PowerPoint SmartArtの箇条書...
-
Wordの数式で文字になってしま...
-
テキストエリア(55個)へのテ...
-
VBAでpng画像に文字列を描画す...
-
Publisherをエクセルファイルに
-
数式中の文字をCambria Math以...
-
カーソルを合わせるとメニュー...
-
VBにて、非アクティブでフォー...
-
Microsoft Access で同じフィー...
-
iTunesでCD-Textを読みたいです
-
アクセスで時間計算(24時間...
-
Excel VBAで改行を含む文字列を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
VB.NETのテキストボック...
-
テキストボックスからフォーカ...
-
mailの送信音がしなくなったの...
-
VB.NET でのLaod/unLoad につ...
-
C++の例外処理
-
NumericUpDownの数値を選択済み...
-
項目数は英語で
-
CD-RWメディアにマジックで書い...
-
Javascript経由でPHPのコントロ...
-
「::演算子」の読み方を教えて...
-
フォームを開く時のイベント処理
-
ヒント表示について
-
コンピュータ言語paythonのエデ...
-
vba メモリーリーク
-
絵画(近代以前)に出てくる美人
-
シリアル通信について
-
【C#】 複数行GcTextBoxのフォ...
-
jscriptの質問
おすすめ情報