$_SESSION 値が未設定になるという問題があります。すべては、アプリケーションのルート ディレクトリに PHP.INI ファイルを配置する必要があるとホストが言ったときに始まりました。次の PHP.ini ファイルを作成し、Web サーバーのルート ディレクトリ (/public_html) に配置しました。
PHP.INI
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
display_errors = off
display_startup_errors = off
この PHP.INI がない場合、私の Web サイトは問題なく動作します。ユーザーがログインすると、ログアウト機能を使用してユーザーを強制終了するまで、セッション変数は持続します。変数 $_SESSION['user_id'] を設定して、誰かがログインしているかどうかを判断します。
しかし、PHP.INI を public_html ディレクトリに配置すると、セッションがバラバラになり始めます。**
奇妙なことは、AJAX 呼び出しを行ったときにのみ発生することです。私はjQueryを使用してajax呼び出しを行い、それに値を投稿しています。
PHP.INIを適切に使用できるようにするためにさまざまなことを試しましたが、残念ながら、エラー報告と魔法の引用符を許可する必要があります...どちらも本番環境では無効にする必要があります!!
私のコードではないことはほぼ確実です...エラーをオフにしたり、魔法の引用符をオフにしたりすると、 $_SESSION 値が空になる可能性がありますか?
コードで変数を 1 回だけ設定し、 $_SESSION['user_id']
$_SESSION の設定解除、array() への設定、またはセッションの破棄に関するすべての言及を削除しようとしました。
session_id() が同じままで、値が設定されたことを確認するコードがあるという点で、セッションはそのまま残ります。
次のように、同じ方法で AJAX 経由で呼び出されるページを含め、すべてのページを開始しています。
<?php
//
// This file returns data for quiz activity on yourquiz.php
//
define ('FILE_MAKE_QUIZ_ACCEPT', true);
$file_path = "../../";
$link_path = "./";
require_once ($file_path . 'func/base_classes.php');
require_once ($file_path . 'func.php');
// Must be logged in to return data back
Session::MustBeLoggedIn(false);
func.php
すべての $_SESSION 変数を UNSETTING せずにロードされるのは、参照を削除した場合のみです。
ここに私のfunc.phpコードがあります:
<?php
// Specify the session name
session_name('maq');
session_start();
if (! defined ( 'FILE_MAKE_QUIZ_ACCEPT' )) {
echo "Possible hacking Attempt";
exit ();
}
// Define constants
/**
* The base URL of uQuiz for a trailing slash
* @var constant
*/
define("##########", '##########');
// Get the database connection
$db_con = Db::GetConnection();
// Run Session Update Function if they are logged in still
// This runs once every page load
Session::UpdateSession();
GetConnection
とUpdateSession
fromをコメントアウトしようとしましたfunc.php
が、それでも$_SESSION
変数の設定が解除されます。
それは完全に奇妙です。これを引き起こす可能性のあるアイデアはありますか?