2009-07-23 20 views
1

PHPを使用しています。現在、データベースからデータを取得して取得するためにクエリーストリングを使用する小さなアプリケーションがあります。データベースのキーも文字列内にあり、それはもはや許容できません。私はそれを変更する必要があります。私はdbキーを隠して、代わりにセッションを使用したいと思いますが、どうやってそれを行うのか分かりません。実際、クエリ文字列には、可能な限りセッションを使用するための変数もあります。クエリーストリングの代わりにセッションを使用する方法

page.php?var1の& var2の& ID = 1

これは私の文字列は次のようになります。私はデータベース内の結果をループしていて、各行にIDを与えて、ユーザーが必要な行をクリックしたときに、セッションでこれをどのように行うことができるかわかりません。

誰にもアイデアはありますか?

おかげ

EDIT: 私は送信者と受信者が取得してメールを送信しているメール型システムを開発しています。サーバーに格納されている各メールには、それぞれ固有のキーが割り当てられます。現在、私はその番号を使ってメッセージを収集していますが、問題は、人々が番号を変更して他の人のメールを読むことを望まないということです。私はおそらく、これまたは何らかのハッシュのためのGUIDを使用することができますが、私は本当に長いクエリ文字列が嫌いです。私は、IDを一気に「隠す」方法があれば、もっとクリーンであると思っていただけです。

+1

メールクライアントを作成するのは恐ろしい1つの方法です。しかし、ここに私の答えがあります。 –

答えて

3

UPDATED(ここでも...うん、私は知っている。)$ _GETパラメータを介してデータの特定のセットへのアクセスを許可する

は、アプリケーションを使用しているために起こるすべてのユーザーにはるかにアクセス可能です。

はプライベートレコードキーを格納するための

を更新し、あなたはおそらくPOSTデータを使用したいしようとしている、とあなたは本当にそれがリンクのように見えるしたい場合は、必ずその部分のためのCSSを使用することができます。

正直言って、他の人のメールを読まないようにする最良の方法は、X人だけがYメール(IDで)にアクセスできるという関係テーブルを持つことです。それは、誰が電子メールの「所有者」であるかを示すフィールドを持っています。

ユーザーは引き続きPOSTパラメータにアクセスでき、独自のPOSTパラメータを簡単に偽造できます。これは、名前付けスキームを知っていれば誰でも他人のメールに現実的にアクセスできるということです。

理想的なシステムでは、送信者と受信者があります(受信者はカンマ区切りの値になります)。これらの列の1つに属している人だけが電子メールにアクセスできるようにする必要があります。

(以前から)セッションを使用する方法

ファーストのsession_start()を呼び出すとオフを開始した後、以前のスクリプトからの変数のことをチェックした後。それらが存在しない場合は、生成します。もしそうなら、それらをつかんで使用してください。

session_start(); 

if(!isset($_SESSION['db_key'])) 
{ 
    $_SESSION['db_key'] = // generate your database key 
} 
else 
{ 
    $db_key = $_SESSION['db_key']; 
} 

セッションは$ _SESSION配列に格納されます。$ _SESSIONを使用したい場合は、session_start()FIRSTを呼び出して、必要なものを割り当てたり取得したりする必要があります。

データを破棄するには、session_destroy()を呼び出します。

また、PHPで$ _SESSIONを使用する方法のいくつかの例がありますSessions

+0

こんにちはChacha102。手に感謝します。データベースキーは常に存在し、基本的にデータを表示するためのものです。だから、もし私がHTMLフォームの行をリストするためにforeachを使用しているのであれば、私は一般的にユーザがクリックできるリンクを含めます。ユーザーに適切なデータ行を表示するには、データベースキーをリンクに含める必要があります。私はあなたのコードをこのように使う方法を見ていない。私が間違っている? –

+0

データベースキーは、ユーザコールまたは個々のコールに対して一意ではありませんか。意味:ユーザーはその特定の行に結びついていますか? –

+0

ユーザーが常に同じレコードを表示する必要がある場合は、そのレコードキーをSESSIONに格納してリンクに含めるのではなく、単にセッションに保存することができるので、ユーザーがそのページに移動すると、 。 –

1

あなたの質問は私にはあまり明確ではないが、私はこのようにそれを理解する:

あなたがページに表示されているかを決定するためにいくつかの変数を必要としています。これらの変数はURLに渡されます。これまでのところ、とても良い、完全に正常です。これらの変数を非表示にしてセッションに保存しますか?

これを考慮してください:今、すべてのページには一意のURLがあります。

http://mysite.com/page?var1=x&var2=y 

は、一意のページを表示します。上記のURLにアクセスするたびに、同じページが表示されます。

何を求めている、私が正しく理解していれば、変数なし

http://mysite.com/page 

のように1つのURLを使用することですが、それでも別のページを取得しますか? これは確かに可能ですが、それはユーザーがサーバー上で何をしているのかを把握する必要があることを意味します。私。ユーザーが「次のページ」をクリックしたときに、彼がページX上にあった最後のときに、今度はYページにあるはずなので、次回にサイトを要求するときにYページを表示します。

これは大変な作業ですが、ユーザーが戻るボタンを使用し始めるとすぐに問題になることがあります。私はこれが良い考えだとは思わない。

機密情報をURLから取り除く必要がある場合は、何らかの理由でそれらを難読化する(ハッシュ)か、それ自体で意味のない代替値を使用します。

あなたのアプリケーションには完全に依存します。ユーザーが複数のページにまたがってデータを蓄積している場合は、セッションが明らかに進む方法です。あなたのアプリがやっていることを少し説明することができますか?

編集:

が、問題は、私は人々が番号を変更したくないということであり、あなたの主な関心事は、セキュリティであれば、他の人のメール

を読んで、それは間違った方法ですとにかくやってください。あいまいさによるセキュリティは機能しません。正しいIDを推測していないことに頼るだけでなく、特定の情報を表示する前にユーザーが明示的に確認できるかどうかを明示的に確認する必要があります。

+0

あなたは良いアイデアではないと思うのですが、私は今それを見ています。あなたは私が何をしようとしているのか理解しました。 :) 助けてくれてありがとう。上記のもう少し詳しい情報を投稿します。それは人々が少し良く理解するのを助けるかもしれません。 –

+0

upvoteと私の答えを受け入れることさえ素晴らしいだろう。 :-P – deceze

+0

もう一度ありがとう。私は現在、メッセージを表示しようとしているユーザーが実際に所有者であることを確認するためにチェックしています。そうでない場合、エラーメッセージが表示されます。それはうまく動作していますが、私は本当にq-stringsを可能な限り取り除きたいと思っていました。私はすでにあなたの答えを投票しようとしましたが、登録するように指示します。 :/ –

0

S $ _GETまたは$ _POSTの代わりにセッションを使用する際の問題は、セッションに保存できるようにユーザーの入力を読み取る方法が必要であることです。ページをリフレッシュします。伝統的な手段はハイパーリンク経由であり、これはデフォルトでGET(Javascriptを使用しない限り)またはフォーム(デフォルトはPOST)になります。

多分、ここにアヤックスがお手伝いします。ユーザーがフォームまたはチェックボックスに情報を入力したら、JSを使用してPHPに情報を挿入し、ページを更新するかどうかにかかわらず情報を返信する要求を送信します。

希望します。

+0

ちょっとエクストラクン、助けてくれてありがとう。あなたの権利、それは私がハングアップしているところです。フォームにデータをエコーする方法はわかりませんが、投稿時に非表示にしています。 AJAXは解決策ですが、私は絶対に何も知っていません。私はそれができることが大好きですが、私は過去に私がこのアプリでそれを使用しないことを決定しようと多くの時間を無駄にしました。 –

関連する問題