1

Windows 7 (x64) で Apache 2.4.4 と PHP 5.4.14 を使用しています。私が抱えている問題は、php セッションが固執しないことです。これは Apache 2.2 および PHP 5.4.4 でも発生し、昨日更新されたのはphp.ini.

クロムでは、書き換えルールを使用する場合にのみ、すべてのページのセッション ID が変更されます。書き換えルールを使用すると、Cookieが のままではなく、path奇妙に に変わります。/pages_name//

Opera では、ページを更新してもセッション ID が変更されます。IEでもそうです。

どちらの場合も、ブラウザは Cookie を受け入れます。

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?page=$1&info1=$2&info2=$3 [L]
RewriteRule ^([a-zA-Z]+)/([a-zA-Z0-9]+)/?$ index.php?page=$1&info1=$2 [L]
RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1 [L]

検索した後、いくつかの「解決策」に出くわしましたが、どれも機能しませんでした

セッションの保存パスは機能しており、ファイルが書き込まれています。デフォルトのセッション ハンドラを使用します。

session.cookie_pathに設定/

session.cookie_lifetimeそれ以外に設定0

私は使用していませんsession_regenerate_id

session_start( );すべてのページのコードの最初の行です

さらに情報が必要な場合は、この投稿を更新します。ありがとうございます。


さらに調査すると、それは s の問題であることが判明しましたRewriteRule。まだ修正方法がわかりません。

また、からのCookieは、フォルダーでありながら変数であるかのようにsession_start( )設定されます。このため、すべてのページが独自のを取得します。修正のアイデアはありますか?localhost/home/localhost/index.php?page=homesession id

4

1 に答える 1

1

で新しいセッションを開始する代わりにsession_start();、まずブラウザが現在の session_id を送信済みかどうかを確認します。

if (isset($_POST['session_id'])) {
    $_COOKIE['PHPSESSID'] = $_POST['session_id'];
    session_start();
} else {
    session_start();
}

それでもうまくいかない場合は、PHP や Apache の設定が壊れているようです。デフォルトの設定を試してみませんか?

于 2013-04-13T10:32:26.410 に答える