3

ちょっと変わった質問があります。この種の質問は、開発者が制御できない特定の状況から発生することを、ほとんどの人は認識していると思います。

URL にクエリ文字列パラメーターを常に保持する方法を考えたいと思います。パラメータが設定されていない場合、URL にデフォルトを追加したい ?param=something

これに関連する以前の質問をしたところ、htaccess を使用してデフォルトのクエリを追加できましたが、これは最初のリクエストでのみ機能しますが、アドレスに常に存在することを確認する必要があります。

PHP で設定し、.htaccess でクエリを実行する Cookie の使用を考えています。

それで、これが可能かどうか、そしてこれを行うためのより良い方法があるかどうかを尋ねていますか?

4

4 に答える 4

1

すべてのURLを変更しないと、これが可能であることがわかりません。説明したように、これは非常にハッキーな方法です。

リンクをコピーするために使用する「特別な」ボタンを提供することをお勧めします。URLの代わりにこのボタンを使用してリンクをコピーするようにします。その後、Webサイトをハッキングすることなく、データを適切に制御できます。

編集:パラメータを使用してすべてのリンクを追加するために、JQueryを「追加」できます。これについて考えたことはありますか?

$(document).ready(function() {
  $('a[href]').each(function() {
    this.href = this.href + '?something=<?php echo $_SESSION["myparam"]; ?>'
  });
});

最初のページの読み込み/セッションからパラメータを取得できますが、これにはユーザーがJSを有効にする必要があります(ほとんどの人が現在有効にしています)。

psテストされていないセミ擬似コード。このルートを進むことにした場合、私はそれを適切にテストすることができます。

于 2013-01-21T11:40:00.557 に答える
0

$_GETおよび$_POSTスーパーグローバル変数は、このように使用することを意図していません。なぜそれが必要なのかはわかりませんが、とにかく、SessionまたはCookiesを使用して必要な機能を取得できます。あなたがやろうとしていることは実用的ではありません。業界標準は、セッションと Cookie を使用することです。それらを試してみてください。きっとあなたに役立つと確信しています。問題がある場合はお知らせください。

于 2013-01-21T11:07:58.093 に答える
0

Apache 2 を使用している場合は、URL に「param=...」を含まない各リクエストに GET パラメータを追加する書き換えルールを追加できます。(未テスト) のようなもの:

RewriteCond %{QUERY_STRING} !(\A|&)param=
RewriteRule (.*) $1?param=defaultvalue [QSA]

詳細はmodrewrite のドキュメントを参照してください。これを特定の URL に限定したい場合は、別のRewriteCondonを追加できます。%{REQUEST_URI}

于 2013-01-21T12:09:47.080 に答える
0

私は約 3 か月前に php を学んだだけなので、私があなたを道に導いていないことを願っています。


編集: PHP を学習してから約 5 か月が経ちました。この編集の前の私の以前のバージョンは、get to append のみを「構築」しました (そして、おそらく機能しませんでした)。

if (!isset($_GET['param'])) {$_GET['param'] = 'something';} 

$var = '';
while ($other_gets = $_GET)
{
    foreach ($other_gets as $key=>$value)
    {
    if ($key = 'something') {}//do nothing we want the other gets
    else {$var .= '&'.$key.'='.$value;}
    }
}
$get = '?'.$user_param.$other_gets;

preg_replace 拡張機能

$string = 'your webpage before output';
$patterns = array();
$patterns[0] = '/.html/';
$patterns[1] = '/.php/';
$patterns[2] = '/yoursite.com /';//with space
$replacements = array();
$replacements[0] = '.html'.$get;
$replacements[1] = '.php'.$get;
$replacements[2] = 'yoursite.com/index.php'.$get;

次に、文字列を印刷します

echo preg_replace($patterns, $replacements, $string);
于 2013-04-10T16:15:53.697 に答える