PHP7を使用して、これは私がやっている方法では動作していましたが、PHP7では動作しません。完全に正常なhello worldの例から始めましょう。?action1 =&action2 =を使用するのではなく、/ action1/action2を使用するとSession_startがセッションを読み取れません。
<?php
session_start();
if(TRUE){
$_SESSION['test'] = 'Hello World!';
}
print_r($_SESSION);
echo "<P>".session_id();
これをTRUEで実行すると、この赤ちゃんは完全に動作します。それをFALSEに設定すると、期待どおりの結果が得られます。それを繰り返し実行すると、同じ結果が得られます。セッションファイルにアクセスして、変数が保存されていることを確認することもできます。
今、私はドメインパスを使用して自分のコードを制御するファンです。 E.G.、example.com/action1/action2 Action1は私の.htaccessファイルでPHPの型ファイルとして識別され、私のdoc_rootにはシンボリックリンクaction1 - > index.phpがあります。これはうまくいきますが、これらのパスをURIに追加すると、セッションは変数の読み込みを停止します。
理由を理解できたら助かりますか?はい、明らかな解決策は、「私がこれをすると痛いです。どうすればいいですか?それはしないでください。しかし、私が言ったように、私はファンです。率直に言って、これはうまくいくはずです。唯一のクッキーは正しいです。 session_id()
は、同じセッションIDとファイルを調べていると報告しています。データで満たされているのと全く同じセッションID。/action1/action2コンポーネントを削除すると、$ _SESSION変数が再び表示されます。
これはなぜ起こるのですか?セッションを無効にするパスを追加することはどうですか?予想されるセッションIDを持っている限り、PHPはなぜ気にしますか?私もfile_get_contents()
セッションファイルを試してみたので、内容はsession_decode()
でした。アクションパスがなければ、ファイルを読み込んで処理することができます。アクションパスで(ドラムロールしてください...)私もファイルを読むことができません。所有権の変更のようなものがありますが、私はファイルとディレクトリの権限を広く開いています。何か案は?
.htaccess:
RewriteEngine On
RewriteBase/
AddHandler application/x-httpd-php70 .php
<Files action1>
SetHandler application/x-httpd-php
</Files>
編集:これを自分でテストする場合は、最初のファイルをtest.php
に保存し、次に示すように.htaccessファイルを更新します。最後にln -s test.php action1
。 domain.com/test.php
を実行して、セッションが機能していることを証明してください。次にdomain.com/action1
を実行し、変数が消えるのを見てください。
セッションファイルを開くことができないように、セッションファイルにロックが存在する可能性があります。アクセス許可であってはなりません。また、最高レベルのログを有効にして、ログで詳細を確認できるかどうかを確認することもできます。 – hakre
'display_errors'を' E_ALL'に設定しました。 '/ var/logs'ファイルを探していました。私は本当に迷っています。 – JBH
セッションファイルを開けなかった場合、警告が表示されません。 – hakre