ホームページ バックエンド開発 PHPチュートリアル データベース接続における超常現象に関するディスカッション、シニア、

データベース接続における超常現象に関するディスカッション、シニア、

Jun 13, 2016 am 11:59 AM
cookie nbsp session virtual

データベース接続における超常現象について議論しています。経験豊富な専門家が緊急の支援を求めてください。
SAAS モデルの ERP システムを構築しました。現在の方法では、企業ごとにデータベースを構築しますが、共通の PHP スクリプトを使用します。たとえば、私の SAAS 顧客には 50 社の企業があり、これは MYSQL で 50 の DB を構築したことを意味しますが、データ構造はすべて同じです。この場合、PHP スクリプトは 1 セットしかないため、1 か所を変更することは 50 台のシステムをアップグレードすることに相当し、より便利です。
各企業が最初のページにログインするときに、データベースに接続するための PHP スクリプトに SESSION['db'] を保存します。接続された DB の名前は SESSION['db'] です。この会社 データベースを追加、削除、変更し、チェックインするだけです。

今起こっている奇妙なことは、シリアル番号が時折発生することです。たとえば、A 社は最初のページでログインするときに SESSION['DB'] = 'A' を設定し、再度ログインするときに A という名前のデータベース内のユーザー名とパスワードを確認します。データベース内のテーブルを追加、削除、および変更します。しかし、A社がログインして更新すると突然B社のデータになり、その後C社のデータが表示されるということがたまに起こります。この接続では DB が A に固定されているのに、なぜ他のデータベースのデータがエイリアス化されるのか疑問に思いました。

私の最初の分析は、スクリプトがすべて同じであるということは、URL がすべて同じであることを意味します。理論的には、SESSION['db']はページを開くたびに自動的に接続されるので問題ありません。シリアル番号が表示されるので、キャッシュが原因であると思われます。後でインターネットで調べてみると、360 Browser がユーザーのプライバシーとチェーン COOKIE をアップロードしたことが報告されているようで、その時は 360 Browser の動作が原因なのかと疑問に思っていました。

最初の対策として、ドメイン名の汎解決を使用して、各社の URL を異なるものに変更しました。つまり、A 社の URL は A.xxx.com、B 社の URL はb.xxx.com ですが、全体的なフレームワークは同じであり、PHP スクリプトも同じです。この場合、360 が COOKIE をサーバー キャッシュにアップロードしたとしても、URL が異なるため、エイリアスは存在しませんよね。しかし、私はまた間違っていたことが分かりました。午後、別の顧客から電話があり、自社のシステムで他社のデータをどうやって見ることができるかについて問い合わせがありました。私は完全に狂っています。

2 回目の分析ですが、mysql_pconnect() 接続が原因なのでしょうか?企業 A がデータベースへの永続的な接続を確立したと考えています。企業 B のログインも mysql_pconnect() です。APACHE は企業 A によって確立された接続を企業 B で使用するために直接使用しますか?そこで、すぐに pconnect を夜間接続に変更しました。しかし、このデータのシリアル番号が商用ソフトウェアに与える影響はそれほど単純ではないと私は感じています。力を入れすぎて、力が及ばないかもしれません。

もう一度、この奇妙な現象がなぜ起こるのか、専門家に分析を手伝ってもらいます。キャッシュの原因を何度も疑ったのですが、キャッシュされたページが表示されても相互に変更できないはずなので、やはりデータベース接続に問題が発生しているのでしょうか?

私の QQ 番号は 13676987、杭州です。専門家とのコミュニケーションを楽しみにしています。


-----解決策---------
1.SESSION[ ' db'] は $_SESSION['db'] ですか?
2. dbname をセッションに書き込む必要があるのはなぜですか?
各サイトで構成ファイルを使用して異なる情報を記録しないのはなぜですか? たとえば、各サイトに config.php、
define('DBNAME', 'db1');
3. dbに保存されているのでしょうか?
------解決策----------------------
そうであれば、仮想ホストは 50 個になるはずです それは違います。
Apache の Env モジュールを使用します。使用方法は以前書いた記事を参照してください: http://blog.csdn.net/fdipzone/article/details/9388959

仮想ホストに

<br /><IfModule mod_env.c>  <br />SetEnv DBNAME DB1<br /></IfModule> <br />
ログイン後にコピー
仮想ホストが異なれば、値の設定も異なります。

次に、config で dbname を設定します。
例: $dbname = 'DB1'; は $dbname = $_SERVER['DBNAME'];

に変更されました-----解決策---------- - --------ヒント: Env を使用して保存されたデータは Web 上でのみ読み取ることができ、php cli モードでは読み取ることができません。特定のニーズに応じて使用してください。

------解決策----------------------データベースの長い接続はデータベース サーバーに対して再利用されます

システム内の他社のデータを確認する方法について
から開始します。: 「初動対応策」から開始します。ドメイン名の汎解決を使用する」は、ユーザー認証が独立していることを示します。 SSO は現在非常に人気があり、あなたもそれを使用している可能性を排除しません
複数の企業が同じソフトウェアのセット (インターフェイスを含む) を変更せずに使用できるため、これらの企業が関与していることがわかります同じ業界で。したがって、A社の人間がB社の人間のログインパスワードを知っている可能性は否定できません
マルチタブ ブラウザを使用して、タブ A で会社 A にログインし、タブ B で会社 B にログインします。タブ A に戻ると、企業 B のデータが表示されます
複数のタブが Cookie を共有し、A によって設定されたセッション ID が B によって変更されたため
実際、受信データは無条件に信頼されます。実装の根拠

第2レベルドメイン名方式を使用する場合、ドメイン名が異なるためCookieは共有されません。しかし、まだシングルサインオンである場合、信頼ドメインのせいで状況は変わりません

現在、データベースの機能を信じず、データキャッシュなどを構築することを好む人が多すぎます(恐れ)
データ キャッシュは主にクエリ名によって区別され、システム内のデータの所属を区別するのはライブラリ名です。混同されるのは普通のことです。



-----解決策---------

引用:
データベースの長い接続は、データベース サーバーへの接続を再利用しますが、データベースへの接続は再利用しません

より、システム内の他の企業のデータを確認する方法開始:
「最初の応答では、ドメイン名の汎解決を使用しています」から、ユーザー ID 検証が独立していることがわかります。 SSO は現在非常に人気があり、あなたもそれを使用している可能性を排除しません
複数の企業が同じソフトウェアのセット (インターフェイスを含む) を変更せずに使用できるため、これらの企業が関与していることがわかります同じ業界で。したがって、A社の人がB社の人たちのログインパスワードを知っている可能性は否定できません
マルチタブブラウザを使用して、タブAでA社にログインし、タブBでB社にログインします。タブ A に戻ると、企業 B のデータが表示されます
複数のタブが Cookie を共有し、A によって設定されたセッション ID が B によって変更されたため
実際、受信データは無条件に信頼されます。実装の根拠

第2レベルドメイン名方式を使用する場合、ドメイン名が異なるためCookieは共有されません。しかし、まだシングルサインオンである場合、信頼ドメインのせいで状況は変わりません

現在、データベースの機能を信じず、データキャッシュなどを構築することを好む人が多すぎます(恐れ)
データ キャッシュは主にクエリ名によって区別され、システム内のデータの所属を区別するのはライブラリ名です。混乱するのは普通のことです。


問題はキャッシュにあるということですか?毎回データベースに接続していれば問題ないのでしょうか?
------解決策----------------------
キャッシュを使用しない場合、問題が解決される可能性があります存在する 1 つの側面
$_SESSION['db'] を信頼するだけでなく、ユーザーのソースを特定する方法が少なくとも 1 つある場合は、問題の考えられる側面を 1 つ取り除くことができます
既知の潜在的な問題は排除されましたが、問題は解決されていません
つまり、未知の潜在的な問題がまだ存在しており、それは議論する必要がある問題です

ポスターも同じ意味です。そして彼は、あなたが知っている考えられる問題をリストアップして、トラブルシューティングできるようにしてほしいと願っています
それらを解決する方法については、別の日の話になります。問題は見つからず、解決策は無駄です

Quote:
問題がキャッシュにあるということですか?毎回データベースに接続していれば問題ないのでしょうか?

-----解決策---------------------------- -
データベースリンクも再利用されている可能性はありますか?
絶対に不可能です

特に SESSION['DB'] が何らかの不明な理由でクリアされた場合はどうでしょうか?
SESSION['DB'] がクリアされている場合、mysql_select_db('') を実行するのと同じですが、これは失敗します (データベースが選択されていません)

私が話しているキャッシュはキャッシュを指しますプロジェクトの機能
通常、クエリ結果をキャッシュするために使用され、頻繁なアクセス中にデータベースを読み取りません

第 2 レベルのドメイン名が使用されている場合、第 2 レベルのドメイン名はデータベース名
----- -解決策---------
お気に入り~~~~



-----解決策---------
マーク、通り過ぎる初心者そこから学びましょう
私がこれを作るとしたら、顧客用に個別のテーブルを作成し、各データ テーブルとインデックスに顧客 ID フィールドを追加して、顧客を追加するためのシンプルな一般的な背景を作成します。これは管理に便利です。 ~
xxx で変数をフィルタリングする場所にフロントのモデル層を渡すと、一律に顧客 ID = xxx を追加します~ しかし、この方法のデメリットがよくわかりません


------解決策----------- ----------
引用:
引用: 引用:

ヒント: Env を使用して保存されたデータは Web 上でのみ読み取ることができ、php cli モードでは読み取ることができません。特定のニーズに応じて使用してください。

50 個の仮想ホストは使用せず、ドメイン名の汎解像度を使用したのは 1 つだけです。すべての第 2 レベルのドメイン名が仮想ホストを指すようにします。


当然のことですが、提供される情報はそれほど多くありません。分析するのは難しいですが、上司はすでにより包括的に分析しています。
------解決策----------------------
ドメイン名に基づいています。 $_SERVER[' HOST'] どのデータベース接続を使用するかを決定しますか?

コードリファレンスのその部分を提供していただけますか?
------解決策------------------
私の現在のアプローチは、会社ごとに 1 つを使用することです 独立
会社 a は http://a.xx.com を使用します
会社 b は http://b.xx.com を使用します

セッションはドメインを越えません。現在、複数の企業間でのデータの文字列の問題は発生していません。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

解決策: 組織では PIN を変更する必要があります。 解決策: 組織では PIN を変更する必要があります。 Oct 04, 2023 pm 05:45 PM

ログイン画面に「組織から PIN の変更を求められています」というメッセージが表示されます。これは、個人のデバイスを制御できる組織ベースのアカウント設定を使用しているコンピューターで PIN の有効期限の制限に達した場合に発生します。ただし、個人アカウントを使用して Windows をセットアップした場合、エラー メッセージは表示されないのが理想的です。常にそうとは限りませんが。エラーが発生したほとんどのユーザーは、個人アカウントを使用して報告します。私の組織が Windows 11 で PIN を変更するように要求するのはなぜですか?アカウントが組織に関連付けられている可能性があるため、主なアプローチはこれを確認することです。ドメイン管理者に問い合わせると解決できます。さらに、ローカル ポリシー設定が間違っていたり、レジストリ キーが間違っていたりすると、エラーが発生する可能性があります。今すぐ

Windows 11で明るさを調整する10の方法 Windows 11で明るさを調整する10の方法 Dec 18, 2023 pm 02:21 PM

画面の明るさは、最新のコンピューティング デバイスを使用する上で不可欠な部分であり、特に長時間画面を見る場合には重要です。目の疲れを軽減し、可読性を向上させ、コンテンツを簡単かつ効率的に表示するのに役立ちます。ただし、設定によっては、特に新しい UI が変更された Windows 11 では、明るさの管理が難しい場合があります。明るさの調整に問題がある場合は、Windows 11 で明るさを管理するすべての方法を次に示します。 Windows 11で明るさを変更する方法【10の方法を解説】 シングルモニターユーザーは、次の方法でWindows 11の明るさを調整できます。これには、ラップトップだけでなく、単一のモニターを使用するデスクトップ システムも含まれます。はじめましょう。方法 1: アクション センターを使用する アクション センターにアクセスできる

iPhoneのSafariでプライベートブラウジング認証をオフにする方法は? iPhoneのSafariでプライベートブラウジング認証をオフにする方法は? Nov 29, 2023 pm 11:21 PM

iOS 17 では、Apple はモバイル オペレーティング システムにいくつかの新しいプライバシーおよびセキュリティ機能を導入しました。その 1 つは、Safari のプライベート ブラウジング タブに対して 2 段階認証を要求する機能です。その仕組みとオフにする方法は次のとおりです。 iOS 17 または iPadOS 17 を実行している iPhone または iPad では、Safari でプライベート ブラウズ タブを開いていて、再度アクセスするためにセッションまたはアプリを終了する場合、Apple のブラウザでは Face ID/Touch ID 認証またはパスコードが必要になります。言い換えれば、ロックが解除されている iPhone または iPad を誰かが手に入れても、パスコードを知らなければプライバシーを閲覧することはできません。

Win10/11 デジタル アクティベーション スクリプト MAS バージョン 2.2 がデジタル アクティベーションを再サポート Win10/11 デジタル アクティベーション スクリプト MAS バージョン 2.2 がデジタル アクティベーションを再サポート Oct 16, 2023 am 08:13 AM

有名なアクティベーション スクリプト MAS2.2 バージョンでは、デジタル アクティベーションが再びサポートされています。このメソッドは @asdcorp とそのチームが考案したもので、MAS 作成者はそれを HWID2 と呼んでいます。 https://github.com/massgravel/Microsoft-Activation-Scripts から Gatherosstate.exe (オリジナルではなく、変更されたもの) をダウンロードし、パラメータを指定して実行し、AuthenticTicket.xml を生成します。まず元のメソッド: Gatherosstate.exePfn=xxxxxxx;DownlevelOriginalState=1 を確認し、次に最新のメソッド: Gatheros と比較します。

Cookie はどこに保存されますか? Cookie はどこに保存されますか? Dec 20, 2023 pm 03:07 PM

Cookie は通常、ブラウザの Cookie フォルダに保存されます。ブラウザの Cookie ファイルは通常、バイナリ形式または SQLite 形式で保存されます。Cookie ファイルを直接開くと、文字化けしたり判読できないコンテンツが表示される可能性があるため、使用することをお勧めします。 Cookie を表示および管理するためにブラウザによって提供される Cookie 管理インターフェイス。

コンピューター上の Cookie はどこにありますか? コンピューター上の Cookie はどこにありますか? Dec 22, 2023 pm 03:46 PM

コンピュータ上の Cookie は、使用するブラウザとオペレーティング システムに応じて、ブラウザ上の特定の場所に保存されます。 1. Google Chrome、C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies に保存されます。等

セッション失敗を解決する方法 セッション失敗を解決する方法 Oct 18, 2023 pm 05:19 PM

セッション障害は通常、セッションの有効期間の期限切れまたはサーバーのシャットダウンによって発生します。解決策: 1. セッションの有効期間を延長する; 2. 永続ストレージを使用する; 3. Cookie を使用する; 4. セッションを非同期的に更新する; 5. セッション管理ミドルウェアを使用する。

PHP セッションのクロスドメイン問題の解決策 PHP セッションのクロスドメイン問題の解決策 Oct 12, 2023 pm 03:00 PM

PHPSession のクロスドメイン問題の解決策 フロントエンドとバックエンドの分離の開発では、クロスドメイン要求が標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。 1. ドメイン間でセッションを共有するための Cookie の最も一般的な使用法

See all articles