2013-01-07 14 views
17

GETパラメータを値なしで使用しているURLについて私の上司と少し議論しています。例えば。GETパラメータ(URL内)を値なしで使用するのは悪い習慣ですか?

http://www.example.com/?logout

は、私はかなり頻繁にウェブ上のリンクのこの種を見るが、もちろん、これは良いことだという意味ではありません。 、私は空のパラメータを使用して任意の問題が発生したことがありません、私の経験で

http://www.example.com/?logout=yes

:これは標準ではなく、予期しないエラーにつながる可能性があることを彼が恐れるので、彼は私のようなものを使用するようにしたいというように彼らは時には私にとってより意味をなさない(この場合のように、?logout=noは意味をなさないので、 "ログアウト"の値は無関係であり、私はパラメータサーバ側の存在をテストするだけです。値)。 (クリーナーにも見えます)

しかし、私はこの種の使用法が実際に有効であるという確認を見つけることができず、実際には何の問題も生じません。

これに関するリンクがありますか?

+1

'isset($ _ GET ['logout']);'を使っている限り、問題はないと思います。 –

+0

まさに私がやっていること。 :) – s427

答えて

16

RFC 2396、「ユニフォームリソース識別子(URI):汎用構文」、§3.4、「クエリコンポーネント」クエリ文字列の情報の信頼できるソースであり、および状態:

クエリコンポーネントでありますリソース によって解釈される一連の情報。クエリコンポーネント、文字以内

[...]

";"、 "/"、 ":"、 "@"、 "&"、 "="、 " "?" + "、"、 "、" $ "は予約されています。

RFC 2616「ハイパーテキスト転送プロトコル - HTTP/1.1」、§3.2.2、「http URL」はこれを再定義しません。

つまり、指定したクエリ文字列(「ログアウト」)は完全に有効です。

+2

正確なリファレンスをありがとう。 :-)誰かが興味を持っているなら、直接リンクです:https://tools.ietf.org/html/rfc2396#page-15。関連性:https://tools.ietf.org/html/rfc1738#page-9(別の回答に記載) – s427

3

これは問題なく、問題なく動作します。しかし、現在ではほとんどのフレームワークはMVCベースなので、コントローラーアクションが必要なので、/users/logoutのようになります(BTW、StackOverflowもそのURLを使用してユーザーをログアウトします)。

それは私にエラーを引き起こすかもしれないこと文が手動で生$_GETにアクセスするアプリケーションのように聞こえる、と私は間違いなく(通常はMVCスタックおよびルータ/ディスパッチャを提供)フレームワークなしでアプリケーションを構築することであると思います本当の危険なことはここにある。

+0

"あなたが本当にあなたの事例で危険なものを見つけなければならないか"、あるいは "これを絶対にしないでください"のような "本当の危険なこと"? – s427

+0

前者:)まだ、プレーンなPHPやバニラJSで開発していたり​​、とにかくライブラリを持たないプログラミング言語を使っているのであれば、明確なレスポンスのためのスマートなプラクティスではありません – Raffaele

7

値がである必要はありません。キーは効果があります。 URLの有効性も低下するわけではありませんが、URL RFC1738には、URLの必須部分として表示されません。

実際に値を必要としない場合は、単なる問題です。

http://example.com/?logout 

は同じくらい有効なURL

http://example.com/?logout=yes 

などのすべての違い、それがなることですあなたが「はい」ビットが絶対的に設定された、あなたはそれをチェックすることができることを確認する場合ということです値。同様に:

if(isset($_GET['logout']) && $_GET['logout'] == "yes") { 
    // Only proceed if the value is explicitly set to yes 

あなただけlogoutキーはURLのどこかに設定されたかどうかを知りたい場合は、それはそれに割り当てられた値のないキーを一覧表示するには十分であろう。

+0

ありがとうございます。あなたが与えたリンクをブラウズすると、別の答えで言及されているhttps://tools.ietf.org/html/rfc2396#page-15も見つかりました。 – s427