なぜこのようなものが機能しないのだろうか (実際には機能しない):
4.php :
<php
session_start();
$my_id = session_id();
$_SESSION['username'] = (($_SESSION['username'] == 'nimic') ? 's-a schimbat' : $_GET['test']);
file_put_contents('comm.g', PHP_EOL.$my_id, FILE_APPEND);
sleep(3); // can be left out
echo $_SESSION['username'];
?>
4.php は、$_SESSION の「ユーザー名」コンポーネントのみを設定し、セッション ID をファイルに書き込み、その後 $_SESSION['username'] 値をエコーする単純なページです。
それで:
3.php :
<php
while(true)
{
if(file_exists("comm.g"))
{
$c = file("comm.g");
unlink("comm.g");
session_start();
foreach($c as $k => $v)
{
if($v != '')
{
$my_id = session_id();
session_write_close();
session_id($v);
session_start();
file_put_contents("result.cc", $_SESSION['username'].'---'.$v.'END'.PHP_EOL.PHP_EOL, FILE_APPEND);
$_SESSION['username'] = 'somethingelse';
session_id($my_id);
session_start();
}
}
session_write_close();
}
}
?>
3.php は cronjob によって毎分、約 30 秒間 (サーバーが強制終了するまで) 実行されます。とにかく、result.cc
(利用可能な 30 秒で) 期待される結果を見つけます... $_GET['test'] の値です。
しかし、それは $_SESSION['username'] の値を変更しません。私は実際にそのような動作を期待していませんでした。スリープが十分ではないことはわかっていましたが、それでも、更新時に変更すべきではありませんか? ...
私のコードがひどいことはわかっています。これは単なるテストです。うまくいけば改善されるでしょう。
しかし、私はそれを理解していないようです。私は何を間違っていますか?実際、私は多くのことを間違っています。システム自体はこのように使用されるべきではありません。私もそれを知っていますが、それでも、今のところこれが私の唯一の選択肢です。私はこれについてもっと複雑な考えを持っていますが、これがうまくいかなければ他のものもうまくいきません。
私の意図は、実際には別のスレッドでコードを実行して、いくつかの変更を回避できるようにすることです(ファイルスキームのラッパーを登録し、必要なときにラッパークラス内で登録解除(復元)する権限がないなど)そこで作りました。非正統的な方法、私は知っています...
それで、何かアイデアを手伝ってもらえますか?ありがとうございました。
編集1
興味深いアイデアに私を導いたとしても、@ Benの答えは正確ではありませんでした...実際にはCookieにはセッションIDのみが保持されます。ファイルを使用してCookieの必要性を置き換え、cronjobがどのセッションを変更する必要があるかを認識しました「登録済み」セッションの $_SESSION['username'] の正しい値を取得しましたが、それでも、いまいましい値を変更できませんでした。読み取り専用とマークされているようでした。今、再考して、私はそのアイデアがまだ足元にあり、実行可能であり、解決策であることに気づきました. 私の質問はまだ残っています...なぜうまくいかないのですか?