3

PHPスクリプトに投稿されるテンプレートにフォームがあります。このスクリプトは、$ _ SESSION配列にいくつかの変数を設定してから、標準を使用して同じページにリダイレクトします。

header("Location: index.php?page=enquiry-form");

問題は、再起動後にページが読み込まれるたびに、セッションに次の3つの変数しか含まれないことです。

  • cmsuserkey
  • cms_admin_user_id
  • cms_admin_username

...私のすべてが消えました。

  • 私はsession_start();を呼び出しています。私のphpスクリプトで
  • 構成オプションを設定しました:$ config ['use_smarty_php_tags'] = true;

フォームを使用するためにユーザーがログインする必要はありません(実際、サイトはログインをまったく使用していません)。

誰かが私がしていない/間違っていることを提案できますか?

ありがとう、リッチ

4

2 に答える 2

2

私は一度同じ問題を抱えていて、セッションを保存するためにリダイレクト後にアドインexit()で修正しました:

 header("Location: index.php?page=enquiry-form");
 exit();
于 2011-07-14T21:03:35.537 に答える
1

同様の問題が発生しました(CMS Made Simpleセッションのデータを別のphpファイルで使用したかったのですが)。私にとっての原因は次のとおりです(質問に対する私のコメントで述べられているように):

CMS Made Simple(今後のCMS)は、独自のセッション名を作成します。これは、別のphpファイルでsession_start()を実行すると、同じセッション名を持たないことを意味します。したがって、php-fileはCMSのセッションデータにアクセスできず、CMSはphp-fileのセッションデータにアクセスできません。

解決策は論理的に原因から導き出されます。同じセッション名を使用するには、両方が必要です。CMSはinclude.php、アプリのルートフォルダーにあるセッション名を設定します。

$dirname = dirname(__FILE__);
...

$session_key = substr(md5($dirname), 0, 8);

#Setup session with different id and start it
@session_name('CMSSESSID' . $session_key);

したがって、phpファイルでは、(を呼び出す前にsession_start();)次のことを行う必要があります。

//Substitute the string $dirname for the result of __FILE__ in **include.php**!!!
$dirname = '/data/web/somefolder/someotherfolder/'
$session_key = substr(md5($dirname), 0, 8);
@session_name('CMSSESSID' . $session_key);
//Now you can call session_start();

これを行うと、phpファイルがCMSのセッションにアクセスできるようになります。重要なデータをセッションに配置するプラグインを使用する場合は、そのデータを消去しないように注意する必要があります。

注:私はCMSバージョン1.8.2を使用していますが、別のバージョンを使用すると、このソリューションが機能しない場合があります。

于 2013-01-04T12:52:49.640 に答える