検索
ホームページバックエンド開発PHPの問題PHPがセッションを通過できない場合はどうすればよいですか?

php がセッションを渡せない問題の解決策: 1. クライアントで cookie を有効にする; 2. ブラウザの問題を確認して cookie にアクセスする; 3. php.ini で session.use_trans_sid を有効にする。

PHPがセッションを通過できない場合はどうすればよいですか?

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

PHP で SESSION をページ間で渡せない問題の解決策

PHP で SESSION を使用している友人は、SESSION 変数をページ間で渡せないという問題に遭遇する可能性があります。これには数日間悩みましたが、情報を調べて最終的に問題を考え、解決しました。この問題の原因は次のとおりだと思います:

1. クライアントで Cookie が無効になっている
2. ブラウザに問題があり、一時的に Cookie にアクセスできません
3. php のセッション。 ini.use_trans_sid = 0 またはコンパイル中に --enable-trans-sid オプションがオンになっていませんでした

なぜこのようなことが起こっているのでしょうか?以下に説明します:

セッションはサーバー側に保存されます (セッションはデフォルトでファイルとして保存されます)。クライアントから提供されたセッション ID に従って、ユーザーのファイルが取得され、変数の値が取得されます。セッションIDはクライアントのCookieを利用するか、Http1.1プロトコルのQuery_String(アクセスしたURLの「?」以降の部分)をサーバーに送信し、サーバーがSessionディレクトリを読み込みます。つまり、セッションIDはサービス上に保存されているセッション変数を取得するためのIDカードです。 session_start();というコードを実行すると、サーバー上にセッションファイルが生成され、それに一意に対応するセッションIDが生成され、セッション変数は、生成されたセッションファイルに一定の形式で格納されるように定義されています。セッション ID を通じて、定義された変数を取得できます。ページを横切った後、セッションを使用するには、session_start() を再度実行する必要があります。別のセッション ファイルが生成され、それに応じて対応するセッション ID が生成されます。このセッション ID を使用すると、言及された最初のセッション ファイルを取得することはできませんこのセッション ID はそれを開くための「キー」ではないため、変数が入力されます。 session_start(); の前にコード session_id($session id); を追加すると、新しいセッション ファイルは生成されず、この ID に対応するセッション ファイルが直接読み取られます。

PHP のセッションは、デフォルトでクライアントの Cookie を使用してセッション ID を保存するため、クライアントの Cookie に問題があると、セッションに影響します。セッションは必ずしも Cookie に依存する必要はないことに注意してください。これが、Cookie と比較したセッションの優れた点でもあります。クライアントの Cookie が無効になっている場合、または問題が発生している場合、PHP は自動的にセッション ID を URL に付加し、セッション ID を介してセッション変数をページ間で使用できるようにします。ただし、この添付ファイルには特定の条件もあります。つまり、「php.ini の session.use_trans_sid = 1、またはコンパイル中に --enable-trans-sid オプションがオンになっている」ということです。

上記の原則を理解した上で、Cookie を脇に置いてセッションを使用しましょう。主な方法は 3 つあります:

1. php.ini で session.use_trans_sid = 1 を設定するか、コンパイル中に開きます。 --enable-trans-sid オプションが追加され、PHP がページ間でセッション ID を自動的に受け渡せるようになります。

2. URL を通じて値を手動で渡し、非表示のフォームを通じてセッション ID を渡します。
3. session_id をファイル、データベースなどに保存し、クロスページ プロセス中に手動で呼び出します。

例で説明しましょう:

s1.phps2.php

## php

セッション開始 (); $_セッション [ ' var1 ' ] = 」 中華人民共和国 」 ; ;
$url = 」 次のページ 」 ;
エコー ​ $url ; ?>


php
セッション開始 (); エコー ​ 」 渡されたセッション変数 var1 の値は次のとおりです。 」 。 $_セッション [ ' var1 ' ];
?>

上記のコードを実行すると、クライアント Cookie が正常であれば、「中華人民共和国」という結果が得られるはずです。
ここで、クライアント上の Cookie を手動で閉じて再度実行すると、結果が得られない可能性があります。結果が得られない場合は、php.ini で session.use_trans_sid = 1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにすると、「中華人民共和国」という結果が得られます


これは上記のアプローチ 1 です。

アプローチ 2 について話しましょう:

変更されたコードは次のとおりです:

s1.php


php

セッション開始 (); $_セッション [ ' var1 ' 】 = 」 中華人民共和国 」 ; ; $sn ​ = ​ セッションID (); $url = 」 次のページ 」 ;
エコー ​ $url ; ?>


s2.php メソッド 3: login.html

# php
セッションID ( $_GET [ ' s ' ]);
セッション開始 ();
エコー 」 転送のセッション量var1の値は次のとおりです: 」 。 $_セッション [ ' var1 ' ];
?>


ログイン タイトル >



頭 >
请登录:
### アクション = 」 mylogin1.php 」 >


用户名 :
口 令 :

形状 >
体 >
html >

mylogin1.php

<?   php

   $name   =   $_POST   [   &#39;   name   &#39;   ];
   $pass   =   $_POST   [   &#39;   pass   &#39;   ];
   if   (   !   $name       ||       !   $pass   ) {
   echo       "   用户名或密码为空,请<a href="login.html">重新登录</a>   "   ;
   die   ();
}
   if    (   !   (   $name   ==   "   laogong   "       &&       $pass   ==   "   123   "   )) {
   echo       "   用户名或密码不正确,请<a href="login.html">重新登录</a>   "   ;
   die   ();
}
   //   注册用户  
   ob_start   ();
   session_start   ();
   $_SESSION   [   &#39;   user   &#39;   ]   =       $name   ;
   $psid   =   session_id   ();
   $fp   =   fopen   (   "   e:/tmp/phpsid.txt   "   ,   "   w+   "   );
   fwrite   (   $fp   ,   $psid   );
   fclose   (   $fp   );
   //   身份验证成功,进行相关操作  
   echo       "   已登录<br>   "   ;
   echo       "   <a href="mylogin2.php">下一页</a>   "   ;

   ?>

mylogin2.php

# php
$fp = フォーペン ( 」 e:/tmp/phpsid.txt 」 、 」 r 」 );
$sid = 恐れる ( $fp 、 1024 );
f閉じる ( $fp );
セッションID ( $sid );
セッション開始 ();
もし ( セット ( $_セッション [ ' ユーザー ' ]) && ​ $_セッション [ ' ユーザー ' 】 = 」 老公 」 ) {
エコー ​ 」 ログインしました! 」 ;
}
それ以外 {
// 正常にログインして関連操作を実行します
エコー ​ 」 ログインしていません、アクセス権がありません 」 ;
エコー ​ 」 閲覧するにはログインしてください 」 ;
死ぬ ();
}

?>

Cookie テストもオフにしてください。ユーザー名: laogong パスワード: 123 これは、セッション ID をファイルに保存するためのものです。ファイルは: e:/tmp/phpsid.txt です。ファイル名を決定してください。独自のシステムに従ったパスです。

データベース方式については例を挙げませんが、ファイル方式と同様です。

要約すると、上記のメソッドには 1 つの共通点があります。それは、前のページでセッション ID を取得し、それを次のページに渡す方法を見つけることです。コード session_id (それを渡します) を追加します。 ) 次のページの session_start(); コードの前にあります。表示されたセッション ID);

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPがセッションを通過できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
酸とベースデータベース:違いとそれぞれを使用するタイミング。酸とベースデータベース:違いとそれぞれを使用するタイミング。Mar 26, 2025 pm 04:19 PM

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。Mar 26, 2025 pm 04:18 PM

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

PHP入力検証:ベストプラクティス。PHP入力検証:ベストプラクティス。Mar 26, 2025 pm 04:17 PM

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

PHP APIレート制限:実装戦略。PHP APIレート制限:実装戦略。Mar 26, 2025 pm 04:16 PM

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

PHPパスワードハッシュ:password_hashおよびpassword_verify。PHPパスワードハッシュ:password_hashおよびpassword_verify。Mar 26, 2025 pm 04:15 PM

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。Mar 26, 2025 pm 04:13 PM

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

PHP XSS予防:XSSから保護する方法。PHP XSS予防:XSSから保護する方法。Mar 26, 2025 pm 04:12 PM

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

PHPインターフェイスvs抽象クラス:それぞれを使用する時期。PHPインターフェイスvs抽象クラス:それぞれを使用する時期。Mar 26, 2025 pm 04:11 PM

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール