php永続セッション(転送)
原則:
1. ブラウザーが Cookie を有効にし、PHP が session_start(); を呼び出すと、
初めてページにアクセスしたとき (リクエストにセッション情報が含まれていない場合)、サーバーはセッション ID を生成し、 「応答ヘッダー情報」(初めて返されます)ページにアクセスするとき、ブラウザは「リクエストヘッダー情報」にセッション ID を含めます
Php コード
Cookie PHPSESSID=a2e6b7db91b89014344c254c1db0c086 2. ブラウザが Cookie を無効にしている場合は、URL を使用する必要があります。セッション ID を渡します
各 URL のすべての Pass SESSIONID
で使用でき、PHP ページの先頭で手動で設定します
PHP コード
if(isset($_GET['SESSIONID']) ){ session_id($_GET['SESSIONID']) ; id
セッション名は呼び出す前に session_name($sname) を使用して設定できます (デフォルトは PHPSESSID)
既知の効果的な方法は、session_set_save_handler を使用してすべてのセッション管理作業を引き継ぐことです。この方法では、セッション情報はデータベースに保存され、SQL ステートメントを通じて期限切れのセッションを削除でき、セッションの有効期間を延長できます。正確に制御されています。これは、PHP ベースの大規模な Web サイトで一般的に使用される方法でもあります。しかし、通常の小規模なWebサイトであれば、そこまで時間と労力をかける必要はないようです。
ただし、一般的なセッションの有効期間は制限されており、ユーザーがブラウザを閉じると、セッション変数は保存できません。では、どうすればセッションの永続的な寿命を達成できるでしょうか?
ご存知のとおり、セッションはクライアントから提供されたセッション ID に基づいてサーバー側に保存され、そのファイルはクライアントの Cookie を使用して変数の値を取得します。または、アクセスされたHttp1.1プロトコルのQuery_String(URLの「?」以降の部分)をサーバーに送信し、サーバーがセッションのディレクトリを読み込む...
永続化を実現するにはセッションの設定を行うには、まず php.ini のセッションの関連設定を理解する必要があります (php.ini ファイルを開き、「[セッション]」セクションにあります):
1. session.use_cookies: デフォルト値は「1」です。これは、SessionID が Cookie によって渡されることを意味し、それ以外の場合は Query_String によって渡されます。
2. session.name: これは、SessionID が保存される場所です。変数名は、渡すために Cookie または Query_String にすることができます。デフォルト値は "PHPSESSID" です。
3. session.cookie_lifetime: これは、セッション ID がクライアント Cookie に保存される時間を表します。デフォルトは 0 です。これは、ブラウザがセッション ID を閉じることを意味します。これは、セッションが永続的に使用できないためです。 !
4. session.gc_maxlifetime: セッション データがサーバー側に保存される時間です。この時間を超えると、セッション データは自動的に削除されます。
多くの設定がありますが、これらはこの記事に関連するものです。まず、永続セッションを使用するための原則と手順を説明します。
前に述べたように、サーバーは SessionID を通じてセッション データを読み取りますが、通常、ブラウザーによって送信された SessionID はブラウザーを閉じると失われるため、SessionID を手動で設定して保存するだけで済みます。それ以外の場合は問題ありません...
サーバーの操作権限を持っている場合、これを設定するのは非常に簡単です。次の手順を実行するだけです。
1. 「session.use_cookies」を 1 に設定し、セッション ID を保存するための Cookie をオンにします。デフォルトは 1 で、通常は変更する必要はありません。
2. 「session.cookie_lifetime」を正の無限大に変更します (もちろん、正の無限大のパラメーターはありませんが、999999999 と正の無限大には違いはありません)。 session.gc_maxlifetime" を "session.cookie_lifetime" と同じ時間にします ;
セッションの有効期間を設定するためのパラメータは session.gc_maxlifetime であることが PHP ドキュメントに明記されています。このパラメータは、php.ini ファイルまたは ini_set() 関数を通じて変更できます。問題は、多くのテストを行った後、このパラメーターを変更しても基本的には効果がなく、セッションの有効期間がデフォルト値の 24 分のままであることです。
PHP の動作メカニズムにより、セッション情報を定期的にスキャンしてセッション情報が無効かどうかを判断するデーモン スレッドがありません。有効なリクエストが発生すると、PHP はグローバル変数 session.gc_probability/session.gc_divisor (php.ini または ini_set() 関数を通じて変更することもできます) の値に基づいて GC (ガベージ コレクター) を開始するかどうかを決定します。 。デフォルトでは、session.gc_probability = 1、session.gc_divisor = 100 です。これは、GC が開始される確率が 1% であることを意味します。
GC の仕事は、すべてのセッション情報をスキャンし、現在の時刻からセッションの最終変更時刻 (変更日) を減算し、それを session.gc_maxlifetime パラメーターと比較し、生存時間が gc_maxlifetime を超えている場合は、セッションを削除することです。 。
これまでのところ、すべてがうまく機能しています。では、なぜ gc_maxlifetime が無効になるのでしょうか?
デフォルトでは、セッション情報はシステムの一時ファイル ディレクトリにテキスト ファイルの形式で保存されます。 Linux では、このパスは通常 tmp であり、Windows では通常 C:WindowsTemp です。サーバー上に複数の PHP アプリケーションがある場合、それらのセッション ファイルは同じディレクトリに保存されます。同様に、これらの PHP アプリケーションも一定の確率で GC を開始し、すべてのセッション ファイルをスキャンします。
問題は、GC が動作しているときに、異なるサイト上のセッションが区別されないことです。たとえば、サイト A の gc_maxlifetime は 2 時間に設定され、サイト B の gc_maxlifetime はデフォルトの 24 分に設定されます。サイト B の GC が開始されると、パブリック一時ファイル ディレクトリがスキャンされ、サイト A からのものかサイト B からのものかに関係なく、24 分より古いすべてのセッション ファイルが削除されます。このように、サイト A の gc_maxlifetime 設定は役に立ちません。
問題を見つけたら、修正するのは簡単です。 session.save_path パラメータを変更するか、session_save_path() 関数を使用して、セッションが保存されるディレクトリを専用のディレクトリに指定します。 gc_maxlifetime パラメータは正常に機能します。
厳密に言えば、これは PHP のバグですか?
もう 1 つの問題は、gc_maxlifetime が保証できるのはセッションの存続時間の最短時間だけであり、この時間を過ぎるとセッション情報はすぐに削除されることです。 GC は確率に基づいて開始され、長期間開始されない可能性があるため、gc_maxlifetime を超えた後も多数のセッションが有効になります。この問題を解決する 1 つの方法は、session.gc_probability/session.gc_divisor の確率を 100% まで高めることです。ただし、この問題は明らかにパフォーマンスに重大な影響を及ぼします。もう 1 つの方法は、コード内で現在のセッションの存続期間を確認し、それが gc_maxlifetime を超えた場合は、現在のセッションをクリアすることです。
ただし、サーバーを操作する権限がない場合は、永続的なセッション データの保存を実現するために、PHP プログラムを通じて SessionID を書き換える必要があります。 php.net の関数マニュアルを確認すると、「session_id」関数が表示されます。パラメータが設定されていない場合は、現在のセッション ID が返されます。パラメータが設定されている場合は、現在のセッション ID が指定された値に設定されます。
永続的な Cookie を使用し、「session_id」関数を追加する限り、永続的なセッション データを保存できます。
ただし、便宜上、サーバー設定の「session.name」を知る必要がありますが、ほとんどのユーザーはサーバーの php.ini 設定を表示する権限を持っていません。ただし、PHP には非常に優れた関数「phpinfo」が用意されています。ほぼすべての PHP 情報を表示するために使用されます。
----------------------------------------------- ----------------------------------
< ;?phpinfo()?>
-------------------------------------- - ----------------------------------------
エディターを開く上記のコードをブラウザで実行すると、PHP 関連の情報が表示されます (図 1 を参照)。 「session.name」パラメータがあります。これは必要なサーバーの「session.name」で、通常は「PHPSESSID」です。
SessionID の名前を書き留めると、永続的なセッション データ ストレージを実現できます。
次のようにコードをコピーします:
session_start();
ini_set('session.save_path','/tmp/');
//6 時間
ini_set('session.gc_maxlifetime',21600);ある日
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
追記:
実際、ストレージのせいで真の永久保存は不可能ですCookie の数 時間は限られており、サーバーのスペースも限られています...ただし、長期間保存する必要がある一部のサイトの場合は、上記の方法で十分です。
デフォルトでは、PHP セッションはファイル形式で保存されます。PHP 設定ファイル php.ini に、session.save_handler="files" という行があります。これは、ファイルがセッションの保存に使用されることを意味します。セッションを保存するためにデータベースを使用したい場合は、セッションをサポート モードに変更し、名前を session.save_handler="use" に変更する必要があります。ただし、これはセッションの保存にファイルを使用しないことを意味するだけです。データベースを作成するには、データベースとテーブルも選択する必要があります。
データベースとデータベースのテーブル構造を確立するには、PHP と MySQL の組み合わせが最適なので、名前を変更することもできます。同時に、MySQL にはトランザクション機能がないため、他のデータベースよりも高速ですが、セッション ファイルの保存にはトランザクション処理が必要ないため、より適切に実行することにしました。
データベースを作成します。 CREATE DATABASE 'session'; テーブル構造を作成します。 CREATE TABLE 'session'( id CHAR(30) NOT NULL , 'user 'CHAR(30), data CHAR(3000) ,PARMIRY BY ('id') );
PHP ファイルを書く
PHP コード
はsession_user_start.phpとして保存されています。
a.te.com と b.te.com のセッションは分離されています
www.te.com も取得できません.te.com のセッション
ただし、a.te.com も www.te.com のセッション に到達できませんでした。 sessionid
Php代コード
3600, 'path' => '/', 'ドメイン' => '.phptest.com', 'secure' => false, 'httponly ' => true、 ); call_user_func_array('session_set_cookie_params', $cookieParams); セッション開始(); var_dump(session_id());

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

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

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています
