2012-03-26 10 views
3

GETは、フォームidを投稿し、ウェブサイトIDまたは任意のIDを投稿するのに便利なメソッドです。 しかし、IDを訪問者に漏らすので不安です。

私はフォームを送信する必要はありませんが、私は同時に簡単にIDを取得することができますGET形式に似て使用できる方法はありますか?私は実際に何をしたいのか

sorry, i am so green at it. how to use a session ? if use get , i can define 
$get?id=aaa for each link,but how can i achieve it in session? 

:私はいくつかのフォームを開発したい私の場合は

は、それぞれがその上にIDを持っている、FORMA、formB、formCは...言う

私が使用する場合は、私は<form id="myform" method="get" action="verify.php?id="formA"> を定義しますが、それは安全ではないので、どのようにこれを行うにはセッションを使用できますか?

*答え:。$ _SESSION [ID]を置く= 'フォームID' と同じようにそれを得る*

それはフォームのためokですが、.....

リンクがたくさんあるページを作成したい場合は、セッションを使用してどのように達成できますか? セッションにリンクをバインドする方法はありますか?ありがとうございました。

+2

これは[ '$ _SESSION'](http://us.php.net/manual/en/book.session.php)は何のためにあるのかです。 –

+2

IDの所在と必要事​​項によって異なります。それはあなたがサーバー上で追跡する必要があるものですか?それとも、クライアント側でそれを必要としますか?クライアント側で値を隠す方法はありますが、クライアント側では決して「安全」とはみなされません。 – David

+0

あなたの提案をありがとう、私は私のケースを編集して、それを見てください。 –

答えて

2

GETメソッドは、データをURLに格納します(その理由を表示するためです)。 POSTメソッドはデータを要求本体に入れます。したがって、アドレスバーには表示されません。 ブラウザ本体でリクエストの内容を簡単に確認することができます。

GETメソッドとPOSTメソッドは、このように等しく安全です。 しかし、アレックスが言ったように、あなたはPHPセッションを使うことができましたが、ユーザーが変更しないデータに対してのみ有効です。

あなたがIDを持つユーザーを特定した場合は、$ _SESSION ['userid'](変数名は任意です)を入力するだけで、ユーザーがそのIDを入力すると、セッションのユーザーID。

編集:あなたのurlに :

http://mydomain.com?serviceid=1 call your service number one 

あなたは彼にランダムなようだハッシュを与え、彼はサービスを実行できるように、現在のユーザーのために意味され、トークンシステムを設定することができます。 あなたのスクリプトの初めにこのトークン生成を置くことができます:あなたは(サービスへのリンク付き)あなたのページを生成します次に

session_start(); // To start php session 
// We check if the current user has a token 
if (isset($_SESSION['usertoken'])) 
{ 
    $token = md5('myubbersalt' . md5(time) ); // The token is a random string (not to random there) 
    $_SESSION['usertoken'] = $token; // The server now have set an action token for the user 
} 

、あなたはこのように、URLにトークンを追加します。

echo 'http://mydomain.com?serviceid=1&tok=' . $_SESSION['usertoken']; 
あなたがOを実行できるかどうかを知らせる変数を持っているので、

session_start(); // This should be added at the begining of your script 
... 
// We check if the usertoken match the service token 
$canExecuteService = false; 
if (isset($_GET['tok'] && isset($_SESSION['usertoken'])) 
{ 
    if ($_GET['tok'] == $_SESSION['usertoken']) 
    { 
     $canExecuteService = true; 
    } 
} 

http://mydomain.com?serviceid=1はあなたが内部でトークンをチェックすると呼ばれている。最後

サービスはありません。 トークンの存続期間は、PHPセッションと同じです。プラス2の別個のユーザーは同じトークンを持つことはできません(この単純な世代では、2人のユーザーがまったく同じ時間にページを実行すると同じトークンを共有できます)。加えて、攻撃者はトークンを偽造することはできません。これは、可変ソースから生成され、あなたのウェブサイトだけが知っている塩で塩漬けされているためです。

よろしく

+0

ありがとう、私はリンクの多くを持っているページを作成したい場合、各リンクは同じPHPに行くが、idを参照して、別のものを実装する? –

+0

idがあなたが実行したいアクションを参照している場合、あなたはURLに与えるよりも選択肢がありません。誰かがURLを使ってサービスを呼び出すことができれば、有効なトークンを持っている人だけがそれを実行できるようにするトークンシステムを実装できます。私の編集したポストの例を見てください。 – grifos

4

$_SESSIONを使用して、ユーザーが変更できない詳細を送信できます。

+0

申し訳ありませんが、私はとても緑です。セッションの使い方は? getであれば、私は$ get?id = aaaを各リンクに定義できますが、セッションでどのように達成できますか? –

+0

私はあなたに私のシナリオを提供します、ありがとうございます –

+0

私は '$ _SESSION'のための文書へのリンクを追加しました。 – Jon

1

あなたは$ _POSTまたは$ _GETを使用したくありません。 $ _SESSIONを使用してください。

+0

私はあなたのシナリオを提供します、ありがとうございます –