7

設定されているページ以外のページでセッション変数を使用できません。IOWは非セッション変数のように機能します。私は他の6つの同様のフォーラムに同様の質問が投稿されているのを見つけましたが、それらの他の場合の答えは常に当てはまらないことがわかりました。

これが私のファイルです:

sess1.php

<?php
session_start();

session_register("userid");
session_register("textvar");

$_SESSION['userid'] = 10333 ;
$_SESSION['textvar'] = TextVariable ;

echo "<p>User ID is: " . $_SESSION['userid'] . "</p>" ;
echo "<p>Another variable is: " . $_SESSION['textvar'] . "</p>" ;
?>
<p>Go to the <a href="sess2.php">next page</a>.</p>

そして、 sess2.php

<?php
session_start();

echo "<p>The userid session variable is: " . $_SESSION['userid'] . "</p>";
echo "<p>The other session variable is: " . $_SESSION['newvar']. "</p> ";
?>

それぞれの場合のブラウザ出力は次のとおりです。

sess1.php

ユーザーIDは次のとおりです:10333

別の変数は次のとおりです。TextVariable

[次のページ]に移動します。

そして、 sess2.php

ユーザーIDセッション変数は次のとおりです。

他のセッション変数は次のとおりです。

[最終ページ]に移動します。

そうでないいくつかのこと:

  • 両方のファイルの先頭にsession_start()があります。
  • 変数ディレクトリは書き込み可能であり、セッション変数がそこに表示されています。(私はsess_b62と呼ばれる約100個の小さなファイルを持っています。これらのファイルの中には次のようなものがあります:'userid | i:10333; textvar | s:12: "TextVariable";'。)
  • phpinfo()は、php.iniファイルが正しく読み取られており、有効期間がデフォルトの0に設定されていることを示しています。つまり、ブラウザーが閉じられるまでです。

私は私の機知に富んでいます。助言がありますか?

本当にありがとう。

4

11 に答える 11

7

session_register()必須ではなく、ここで問題が発生している可能性があります。のドキュメントを読んでくださいsession_register()-既存の変数を使用してセッション変数を割り当てることを目的としています。

そしてここから:

そうですね、session_register()は、特定のグローバル変数をセッション変数と見なす必要があることをPHPに通知します。つまり、スクリプトの実行の最後(セッションデータの書き込みが通常発生するとき)に、そのグローバル変数の結果の値は、現在有効になっているセッションハンドラーを使用して書き込まれます。

これがあなたが経験している問題だと思います。スクリプトの実行が終了すると、セッション変数が上書きされます。

于 2009-03-19T18:33:10.280 に答える
2

私が見た1つの間違いは、最初のファイルで設定$_SESSION['textvar']し、2番目のファイルで呼び出していること$_SESSION['newvar']です。

また、動作していることがわかっているサーバーでコードをテストしましたが、上記のエラー以外は正常に動作しました。

また、を削除してみましたがsession_register()、コードは引き続き完全に機能します。

于 2009-03-19T18:38:10.953 に答える
2

同じセッションを複数のページで使用できるようにするには、セッションIDを何らかの方法で実行する必要があります。通常、これはCookieを使用して実行されます(を参照session.use_cookies)が、URLまたはフォームで実行することもできます(を参照session.use_trans_sid)。

したがって、最初に、PHPが正しいセッションとセッションデータをロードできるように、セッションIDが送信されていることを確認する必要があります。

PHPセッションについての私の理解は正しいですか?も参照してください。

于 2009-03-19T18:38:49.330 に答える
1

"session_register()は可変数の引数を受け入れます。そのいずれも、変数の名前を保持する文字列、または変数名または他の配列で構成される配列のいずれかです。各名前について、session_register()はグローバル変数をその名前で登録します。現在のセッションで。」

これらの名前の変数がないため、結果は予測できません。

使用するだけ$_SESSION[$key] = $value;

于 2009-03-19T18:39:26.473 に答える
0

ある種のツールを使用してhttpヘッダーを確認し、Cookieがどのように送信されているかを確認します。おそらく、Webサーバーが正しく構成されておらず、無効な別のドメインでCookieを送信しています。

各リクエストでsession_set_cookie_params()を実行し、正しいドメイン、パスなどが設定されていることを確認することをお勧めします。

于 2009-03-19T18:36:15.513 に答える
0

確認すべきもう1つの明らかなこと:

ディスク容量がいっぱいでないことを確認してください。これにより、セッション データが保存されなくなります。

于 2013-04-09T22:35:33.237 に答える
0

これは古い投稿であることを知っていますが、同様の問題がありました (session_register() を使用していません)。

セッションのタイムアウトが頻繁に発生し、サーバーのセットアップ (「特別な」Windows サーバー ホスティング環境 (Apache を使用)) が原因で、PHP セッションのタイムアウト値を変更できなかったため、セッションを Cookie に変換する必要がありました。

最終結果は、有効期間が延長された Cookie に変換した後も、Cookie データがまだ (送信中に) 失われているということですか? 時折。

とてもイライラします。

LAMP環境でこれが発生したことは一度もないので、質問はLAMPサーバーを使用しているかどうかです。

お役に立てれば。これはPHPの問題ではないと思います。

于 2013-12-20T21:58:24.330 に答える
-1

両方のファイルでsession_registerを使用すると、機能するはずです。

于 2009-03-19T18:38:00.110 に答える