重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になります。

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を表示する事ができるのでしょうか。
アドバイス よろしくお願いします。

A 回答 (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 {
/* 違う画像やテキストを表示 */
}
    • good
    • 0
この回答へのお礼

アドバイスのおかげで、いくつかの処理をして解決しました。
こちらの方が、クレバーですね。
また、これは使い道があり面白いですね。
どうも、ありがとうございました。またよろしくお願いします。

お礼日時:2006/04/07 19:59

確かOperaは設定でリファイラをはかないように設定できます。

それにセキュリティソフトでリファイラがきられてしまう場合もあります。リファイラに、全く別の値を入れてわたすこともできますね。

リファイラが取れる・取れないは閲覧者側の環境によるところが大きいので、スクリプト側ではどうにもできません。あまりリファイラの値に頼ったスクリプトは書かないほうがいいと思いますよ。

方法としては、いくつかあります。
1.index.phpからtop.phpへのボタン部分に
<input type="hidden" name="flash" values="1">
などとパラメータを渡して、それで判別する。

2.セッションにユーザーのサイト内の移動を記録させて、直前がinndex.phpならFlashを表示する。

1の方が簡単、2の方が確実ですかね。

この回答への補足

アドバイス、ありがとうございます。
取りあえず、GETでやりました。
2番目の方法がわからないので、よかったら教えて下さい。
お願いします。

補足日時:2006/04/07 08:07
    • good
    • 0

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