7

正常に実行されている既存のサイトを新しい開発サーバーにコピーしました。

新しいサーバーへのログインが壊れており、セッション Cookie の名前が変更されているという事実まで追跡しました...

ini_set('session.name', 'DOMAIN1');

...ブラウザはセッションCookieをPHPSESSIDとして保存し続けます。

新しいサーバーのアプリケーションから上記の行を削除すると、ログインが再び機能します。しかし、別のアプリケーションもこの名前で PHPSESSID を使用しているため、これは良い解決策ではありません。

そして、回避策を使用するのではなく、奇妙な動作の理由を見つけたいと思います. ここを直さないと、どこかで噛まれる可能性があります。

たぶん、これは誰かが私にヒントを与えるのに十分な情報です. そうでない場合、どのような情報が役立ちますか?

このマシンは非常にネイキッドで基本的な ubuntu 8.04 サーバーで、apache2、mysql、php5 を aptitude と共にインストールしました。ロケールとタイムゾーンも更新しました。

解決:

上記の行を、受け入れられた回答からのこのコードに置き換えました...

if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1'))
{
    die('Unable to set sesssion scope');
}

...そして、ログインが新しいサーバーで機能するようになりました。

4

1 に答える 1

9

ときどきini_set再生され、ini 値を正しく設定できないことがあります。権限が原因である可能性があります。

以下は の問題を完全に解決するものではありません。一部のタイプのホストで が機能しないini_set理由を誰かが知っている場合はini_set、共有してください!

次のことを試してください。

<?
if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1'))
{
    die('Unable to set sesssion scope');
}

phpinfo();
?>

または、単に設定するために使用することもできますがsession_name()、関数を実行するだけでなく、常に if ステートメントをチェックして最悪のシナリオに備えることをお勧めします。これは、アプリケーションが信頼性を高め、エラーが発生しにくくなるときです。

于 2010-10-23T20:32:48.150 に答える