セッションサーバー構成ガイドと使用体験の詳細な分析_PHP チュートリアル
1. 概要
すべての Web プログラムはセッションを使用してデータを保存します。独立したセッション サーバーを使用すると、負荷分散シナリオでのセッション共有の問題を解決できます。セッションを使用する際のさまざまな経験とテクニックを紹介します
2.セッション、セッションID、Cookieについて
セッションデータはサーバー側に保存される必要があり、セッションIDはCookieに保存されます。ブラウザの有効期限が切れます
サーバーに送信される HTTP リクエストにはセッション ID が含まれており、サーバーはセッション ID に基づいてユーザーのセッション情報を取得します。これは、SessionID が Cookie に保存されるため、Cookie のサイズと数が原因で SessionID オブジェクトが発生しないように注意する必要があります。私たちのプログラムでは、SessionID Cookie は特別な処理を行います:
//// & LT;/Returns & GT;
HttpCookie SessionCookie = null; String SessionId = HttpContext.Current.Request.Cookies[ "ASP .NET_SessionId"].Value.ToString();
SessionCookie = new HttpCookie("ASP.NET_SessionId"); SessionCookie.Value = SessionId;
// 中間のコード部分を省略バックアップの SessionID のみを保持し、SessionID ロジックを取得します。 // cookieの総数が20を超えている場合、セッションが失われるのを防ぐために、asp.net_sessionidを書き直します。
三.搭建Session服务器的几种方式
将Session保存在独立的服务器中可以实现在多台Web服务器之间共享Session.虽然我们也可以自己开发Session存储系统, 但是使用ASP.NET自带的存储机制将更加便捷.
.NET提供了5种保存Seission的方式:
方式名称 |
存储方式 | 性能 |
Off |
设置为不使用Session功能 |
无 |
InProc |
设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。 |
性能最高 |
StateServer |
设置为将Session存储在独立的状态服务中。通常是aspnet_state.exe进程. |
性能损失10-15% |
SQLServer |
设置将Session存储在SQL Server中。 |
性能损失10-20% |
Customer |
自定制的存储方案 |
由实现方式确定 |
我们可以在Web.Config中配置程序使用的Session存储方式.默认情况下是InProc, 即保存在IIS进程中. 关于Off, InProc和Customer本文不做讲解. 相关文章大家都可以在网上搜索到.
下面主要讲解 StateServer 和 SQLServer 的应用.
四.使用 StateServer 模式搭建Session服务器 选项 说明 t 将会话数据存储到 SQL Server tempdb 数据库中。这是默认设置。如果将会话数据存储到 tempdb 数据库中,则在重新启动 SQL Server 时将丢失会话数据。 p 将会话数据存储到 ASPState 数据库中,而不是存储到 tempdb 数据库中。 c 将会话数据存储到自定义数据库中。如果指定 c 选项,则还必须使用 -d 选项包括自定义数据库的名称。
(1)服务器端配置
1.启动 Asp.net State service服务.(这个服务默认的状态为手动.修改为自动并启动.)
2.修改注册表: [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\aspnet_state\Parameters]
设置 AllowRemoteConnection = 1 , 设置 Port = 42424 (十进制,默认即为42424)
Port是服务的端口号
AllowRemoteConnection 表示是否允许其他机器连接,0为仅能本机使用,1为可以供其他机器使用.
(2)客户端设置
在Web应用程序的Web.Config中, 我们需要修改
没有则添加(默认使用的是InProc方式)
stateConnectionString="tcpip=服务器ip:42424"
cookieless="false"
timeout="60"/>
上面的参数我们可以根据需要修改.
五.使用SqlServer模式搭建Session服务器
(1)服务器端配置
使用SqlServer模式搭建Session服务器端有两种方式. ASP.NET 1.0和1.1版本请使用方式a, 2.0即以上版本请使用方式b.
a.使用SQL文件创建Session数据库
在ASP.NET 1.0和1.1 版本中, 只能使用这种方式.对于2.0及其以上版本,请使用aspnet_regsql.exe工具.(当然此方法也通用2.0版本)
.net提供了数据库安装脚本,可以在机器的windows文件夹中找到:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ InstallSqlState.sql
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ InstallSqlStateTemplate.sql
根据ASP.NET的版本不同, 需要使用不同的SQL脚本. ASP.NET主要有1.1和2.0两个版本,可以在不同的版本文件夹找到这两个SQL.
InstallSqlState.sql 是创建默认名称的数据库"[ASPState]".此SQL可以直接运行.
InstallSqlStateTemplate.sql 可以使用自己指定的数据库保存数据.此SQL需要自己修改后运行, 打开SQL文件将其中 [DatabaseNamePlaceHolder] 替换为自己指定的数据库名称.
执行installsqlstate.sql时不需要指定数据库,可以在任意数据库上执行.此SQL会自己创建新的数据库
b. 使用aspnet_regsql.exe工具
ASP.NET 2.0版本后微软提供了aspnet_regsql.exe工具可以方便的配置Session数据库.该工具位于 Web 服务器上的"系统根目录\Microsoft.NET\Framework\版本号"文件夹中.
使用举例:
aspnet_regsql.exe -S . -U sa -P 123456 -ssadd -sstype p
-S参数:
表示数据库实例名称. 可以用"."表示本机.
-U和-P参数:
表示用户名和密码.
-E参数:
可以再-U –P 与 -E中选择一组. –E表示以当前系统用户通过windows身份验证登录数据库, -U -P则是使用SqlServer用户登录数据库.
-ssadd / –ssremove 参数:
-ssadd表示是添加Session数据库, -ssremove表示移除Session数据库.
sstype 参数:
(2)セッションクライアント設定
このルームでは、Web.Config の
コードをコピーします
カスタムのデータベース名を使用する場合また、allowCustomSqlDatabase 属性を指定し、データベース接続文字列でデータベースを指定する必要があります:
コードは次のとおりです:
(1) StateServer モード:
1。 Web ファームに同じ
2. セッションに保存されるオブジェクトはシリアル化可能です。
3. Web ファーム内の異なる Web サーバーでセッション状態を維持するには、IIS メタベースの Web サイト アプリケーション パス (LMW3SVC2 など) がすべてのサーバーで一貫している必要があります (大文字と小文字が区別されます)。 Machine.Config で構成された HttpModuel モジュール。.NET インストール ディレクトリの Config フォルダーで Web.Config を表示します (バージョン 1.1 は Machine.Config にあります):
コードをコピーします コードは次のとおりです:
モジュールが存在します。5. StateServer は負荷分散をサポートしていないため、同時実行性が高い場合は、SqlServer の高いパフォーマンスとセキュリティを享受できるように、SqlServer モードを使用することをお勧めします。ただし、ストレージ効率は低下します。
6. .Config の Machine Configuration で、コードをコピーします。
(2)SqlServerモード:
1. セッションに保存されるオブジェクトシリアル化可能です。
3. SQLServer モードでは、SQL エージェントの完了によってセッションの有効期限が切れます。登録タスクを使用して、SQL エージェントが実行されていることを確認します。そうしないと、期限切れのセッション データをクリーンアップできず、データベース データが増加し続けることになります。
4. SqlServer モードを使用する場合は、Web ファーム内の各サーバーの ASP.NET アプリケーション パスが同じである必要があります。 Web ファーム内のすべての Web サーバーの IIS 構成データベース内の Web サイトのアプリケーション パスを同期します。 Web サイトへのアプリケーション パスでは大文字と小文字が区別されるため、大文字と小文字は同じである必要があります。
5. すべてのマシンの MachineKey は Machine.Config で同じにする必要があります:
復号化キー= = "123456789012345678901234567890123456789012345678"
検証 = "SHA1"
復号化 = "自動"
/>
(3)セッション:
1.セッションサーバーを介してASP.NETとASPの間でセッションを直接共有することはできません:
http://msdn.microsoft.com/zh-cn/ library/aa479313.aspx
2. セッションは、Web サイトの異なるアプリケーションまたは仮想ディレクトリ間で共有できません
3. セッションの有効期限はスライド時間です。
4. セッションは、.NET に付属する値の型を保存します。最高のパフォーマンス 優れています。オブジェクトを保存するとパフォーマンスが低下します。
(4)SessionID:
1.SessionID は URL に保存することもできます。Web.Config ファイルの System.Web/sessionState ノードの Cookiesless 属性を設定するだけです。
3. ブラウザを閉じて再度アクセスすると、セッション ID が異なります。
4. IE6 ウィンドウを開くたびに、セッション ID が異なります。 IE6 で共有されます。
で共有できます。
コードをコピーします
コードは次のとおりです:
サフィックスが .htm で、.htm ファイルが渡されない場合ASP.NET ISAPI 処理後、サーバーの速度に応じて各フレーム ページに異なるセッション ID が生成され、更新後は最後のセッション ID と等しくなります。解決策は、.htm サフィックスを .aspx に変更するか、 .htm ファイルを ASP に転送します。
(5) Session_End イベント:
2. ブラウザを閉じると、Session_End はトリガーされません。 HTTP はステートレス プロトコルであるため、サーバーはブラウザが閉じられたかどうかを知る方法がありません。
3. Session_End は、セッションが期限切れになるか、Session.Abandon を呼び出した場合にのみトリガーされます。Session.Clear() はデータをクリアするだけで、セッションは削除されません。
4. Session_End はバックグラウンド スレッドによってトリガーされ、ワーカー プロセス アカウントを使用して実行されます。そのため、プログラムは、Session_End を使用してデータベースにアクセスするときに、許可の問題を考慮する必要があります。ワーカー プロセス (aspnet_wp.exe) これは、machine.config で指定できるアカウントで実行されます。したがって、Session_End では、整合性セキュリティを使用して SQL に接続すると、接続にワーカー プロセス アカウント ID が使用され、ログイン失敗が発生する可能性があります。6. Session_End は独立したスレッドによって開始されるため、HttpContext オブジェクトは使用できません。 Session_End (Request、Response、Server などのオブジェクトはすべて HttpContext 内にあります)、つまり、Response.Redirect や Server.Transfer などのメソッドは使用できません。
VII. 概要
私は SqlServer モードを使用して社内の複数のサーバーのセッション共有を実装しましたが、サーバーを再起動してもユーザーの予約プロセスは再開されません (予約プロセスに必要なセッションは失われません)。 ) この記事が特定のセッション サーバーのビルダーに役立つことを願っています
http://www.bkjia.com/PHPjc/327659.htmlwww.bkjia.com
http://www.bkjia.com/PHPjc/327659.html

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
