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

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

藏色散人
リリース: 2023-03-13 10:06:02
オリジナル
2063 人が閲覧しました

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

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


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

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


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

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

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

s1.php


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


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

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


<; html >< 頭 >

<; タイトル > ログイン


<; メタ http - 相当する = 」 コンテンツタイプ 」 コンテンツ = 」 テキスト/html;文字セット=GB2312 」 >

<; 体 > 请登录:
<; フォーム名 = 」 ログイン 」 方法 = 」 役職 」 ### アクション = 」 mylogin1.php 」 >


用户名 :< 入力方式 = 」 文章 」 名前 = 」 名前 」 >< br >
口 令 :< 入力方式 = 」 パスワード 」 名前 = 」 合格 」 >< br >
<; 入力方式 = 」 提出する 」 価値 = 」 登录 」 >


mylogin1.php

dab9e16aa2ce38d1b59590711cd18413

mylogin2.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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート