2009-07-26 9 views
1

私はいくつかの異なるテーブルを使用するphp/mysqlアプリケーションを作成しています。URLから変数情報を渡す代わりに

表1はユーザー情報(名前電子メールなど)を格納し、表2はユーザーウィジェットを格納し、表3はこれらの個々のウィジェットの構成を格納します。

これを行う方法は、表1にある特定のユーザーの識別に使用する自動インクリメントキーがあります。彼らがテーブル2にアクセスすると、テーブル1からのその特定のユーザのキーIDである "uid"と同様に、そのテーブルを含む行を作成します。ユーザがウィジェットの設定をしたいとき表3では、テーブル2からのユニークなウィジェットIDである「cxid」またはconfig xidを格納します。

これは、どのウィジェットがどのユーザーに表示されるのかを制限することを目的としています。 configは明らかに設定目的のために使用されます。

問題は、個人のウィジェットを呼び出すときに、URLにuidを渡すという問題です。これは明らかにセキュリティ上の問題です。あなたはそれを変更して他の人のウィジェットを見ることができます。しかし、私は誰にもこれがどのように行われているのか知りたくはありません。 URLを使用せず、フォームを使用しないスクリプト間で変数を渡す方法はありますか?

答えて

5

はい、sessionsを使用できます。

基本的には、ユーザーに関するすべての必要な情報を$_SESSIONに保存し、各ページの読み込み時に取得します。例えば

、最初のページの読み込みに:デフォルト

session_start(); 
$_SESSION['uid'] = 123; 

、ユーザは、セッションを特定するが、他の情報を含まないクッキーを受信します。 2ページ目のロードで

、あなたが呼び出すことができます。

session_start(); 
$x = $_SESSION['uid']; 
//$x is now 123 
//run a query here! 

session_start()、ユーザーのCookieを読んで(一時ファイルの場所に保存されているデフォルトでは)セッション情報を見つけて、あなたが格納されている情報と$_SESSIONを記入します最後にあなたがそれらを見た。

+0

を?ユーザーがログアウトしたとき、または別のアカウントでログインしたいときに閉じる/クリアすることはできますか? – mrpatg

+0

はい、session_destroy()コマンドを発行して閉じます。 –

+0

$ _SESSION変数のすべてのデータは、スクリプトの実行が終了するまで持続するため、session_destroyにはバグがあります。すぐにリダイレクトするので問題は見つけられません。 –

2

セッションを使用してPHPページ間の情報を渡すことは可能ですが、ユーザーから情報を取得する唯一の方法(つまり、表示するウィジェット/ cxid)はフォームポストやURL、あなたは今それをやっている。

実際にユーザーが要求したウィジェットを表示する前に、適切なチェックを行う必要があります。

まず、zombatがすでに書き込んだセッションにuserIDを保存します。

次に、あなたのような何かをすることができますどのくらいのセッションが続かない

$result = mysql_query("SELECT cxid, uid FROM table2 WHERE cxid = '42'"); 
$row = mysql_fetch_row($result);  
if ($_SESSION['uid'] == $row['uid']) 
{ 
    // display widget info 
} 
else 
{ 
    echo 'Sorry you can only view your own widgets!'; 
} 
+0

多くの感謝!それは私がやろうとしていることを達成するための非常に簡単な方法です。 – mrpatg

関連する問題