問題タブ [zend-session]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
model-view-controller - Zend_Session と Zend_Log _Db は両方とも、ページの読み込みごとに 2 回データベースに書き込みます
Web には同様の問題の例がたくさん散らばっていますが、この特定のバリエーションを修正する解決策はないようです。任意の提案をいただければ幸いです。
通常、この問題は、不正なリンクによってファビコンや css ファイルなどのリソースのリクエストがディスパッチャーに複数回ヒットし、複数のディスパッチ プロセスが発生し、データベースに複数の行が発生するために発生します。
この非常に単純なサンプル ページのすべてのリンクが、実際にリンク先のリソースに解決されることを確認しました。
セッション ハンドラは次のように設定されます。
db ロギングは次のように設定されます。
両方のオブジェクトが正しく設定されており、データベースの読み取りと書き込みが可能です。すべてが2回しか起こりません。テスト ログ メッセージをアプリケーションの任意の場所に配置すると、データベースに 2 回書き込まれます。index アクションを呼び出すたびに 3 つの変数をインクリメントすると (1 つはセッションに格納され、1 つは Zend_Registry オブジェクトを介して渡され、もう 1 つは indexAction にローカルに渡されます)、セッション変数のみが 2 ずつインクリメントされます。Apache アクセス ログは正しい量を示します。ページの読み込みから発生するリクエストの数であり、すべてのレスポンス コードが 200 または 304 (変更なし) の良好なレスポンス コードを持っています。
すべてのヘッドリンクを無効にしようとしました。レイアウトを完全に無効にしようとしました。すべてをディスパッチャにローカライズし、ディスパッチが実行される前に終了しました。
いずれの場合も、余分な書き込み/インクリメントが発生します。何かご意見は?助けてくれてありがとう。
php - destruct で Zend_Session_Namespace に書き込む
PHP 5.3__destruct
を使用してデータを書き込む際に、少し予期しない動作が発生することに気付きました。Zend_Session_Namespace
デストラクタが呼び出されていますが、データは書き込まれていません。ただし、オブジェクトに対して必要なすべての操作が実行された後に暗黙的に destruct を呼び出し、スクリプトの終了前に破棄を強制すると、データは正常に書き込まれますが、これは行いたくありません。
このバグと関係があると思います: http://bugs.php.net/29032 (バグは私には少し古いようです)、一見したところ修正は良さそうです (シャットダウン関数として __destruct を登録します)。 、前に呼び出された$_SESSION
は使用できません)、しかし、デストラクタは 2 回呼び出されませんか (1register_shutdown_function
回は自動的に呼び出されますか?
確かにシャットダウン時にオブジェクト データの奇数ビットをセッションに書き込むことは解決されていますか? これが必要な場合、人々は何をしますか?
(OSX 10.6.6、Apache 2.2.15 (Unix)、PHP 5.3.3、Zend Framework 1.7.2)
php - Zend_Session_SaveHandler_DbTable は更新のたびにセッションを消去していますか?
基本的に、この質問のポスターと同じ問題に遭遇しています。データベースは正しく初期化されています。と で、データベースとセッション SaveHandler の両方の初期化を試みましapplication.ini
たBootstrap
。どうやっても同じ結果。
初期化は次のapplication.ini
ようになります。
Bootstrap の初期化は次のようになります。
私のセッションデータベーステーブルは次のように定義されています:
私は、その内容をセッションにダンプするだけの非常に単純な 1 フィールド フォームを使用してこれをテストするテスト アクションを用意しています。アクションは次のようになります。
使用するフォームは次のとおりです。
ビューはフォームを表示するだけです。
値が実際にセッションに入ったかどうかをテストするには、index アクションを使用します。問題のインデックス アクションは次のとおりです。
今。セッション保存を使用するように構成してZend_Session_SaveHandler_DbTable
いない場合、つまり、セッション保存をまったく構成していない場合、これは正常に機能します。フォーム フィールドに値を入力し、index アクションに移動して、出力を返します。セッションは想定どおりに機能します。
Zend_Session_SaveHandler_DbTable
または Bootstrapのいずれかで構成した場合、application.ini
テスト フィールドに値を入力してインデックス アクションに移動すると、値がなくなります。私のデータベース テーブルには、適切なsessionID
と がsessionID
ブラウザの Cookie に一致する行があります。しかし、データベースには他の情報はありません。 data
NULL であり、両方のTIMESTAMP
フィールドがゼロに設定されています。
試してみたいものがなくなってきました。Mysql テーブルを通常のテーブルと InnoDB テーブルとして使用しました。データベースとセッション構成のすべての順列を試しました。これには、db を構成配列に指定し、1 つを Bootstrap で初期化し、もう 1 つを で初期化します.ini
。手がかりを求めて Web と StackOverflow を調べました。他の人が同様の問題について投稿しているのを見たことがありますが、私が見つけた答えはどれもうまくいきませんでした。私は何をしていないのですか?私は何を台無しにしましたか?どうすればそれを機能させることができますか?
php - Zend Framework でのセッション変数のブートストラップとアクセス
ZF でさまざまなアクションを介してセッション変数にアクセスする際に問題が発生します。
ブートストラップの内容は次のとおりです。
IndexController で $sessionUser に変数を割り当てます。
そして、管理者コントローラで変数にアクセスしようとします:
それでも私はエラーを受け取ります:
そして、これを引き起こしている可能性のあるアイデアは何ですか?
どうもありがとう
zend-framework - セッションを使用してzendフォームフィールドにデータを入力する方法は?
セッションを使用して、Zend アプリケーションの複数選択ボックスにオプションを設定しています。
ユーザーは 1 つ以上のオプションを選択し、フォームの他のフィールドに入力して送信します。ユーザーが複数選択ですべてのオプションを選択しなかった場合、フォームは再び表示されますが、複数選択には、ユーザーが最後に選択しなかったオプションしかありません。このプロセスは、複数選択から処理するオプションがなくなるまで続きます。
複数選択ボックスの入力に使用されないように、既に処理されたオプションを削除するために使用するコードを次に示します。
print_r($keyword_names);
正しいオプションが表示されますが、ユーザーが送信したときにフォームが読み込まれると、最初から存在していたオプションが複数選択に表示されます。つまり、ユーザーが選択して送信したばかりのオプションは、複数選択から取り出されません。ユーザーがフォームを再度送信したときにのみ、複数選択ボックスが更新されます。
助けに感謝します。
php - Zend Framework - Zend_Session の奇妙な動作
Web サイトの公式ドキュメントに従って、Zend Framework を学習しているところです。
しかし、私は Zend_Session の奇妙な動作に悩まされています: ユーザーが認証されると、アプリケーション ページをサーフィンします - すべて問題ありませんが、ブラウザー ページをすばやく更新した場合 (F5 またはツールバーのボタンを押す)、または AJAX php ファイル (セッションを使用する) が複数回要求された場合 - セッションが突然期限切れになります (ユーザーは認証されていませんが、Cookie の有効期限は同じです)。
ただし、アプリケーションで ACL と MVC 構造を使用していません。
したがって、機能し、非常に単純ですが、ページがすばやく更新されると失敗します。また、理由はわかりませんが、/home/user/sessions/
ユーザーがアクセスしたページごとに個別の Cookie ファイルが作成されます。
ここに同様の質問があります zend セッションが何度も更新されると期限切れになります が、提供された解決策は役に立ちません:(
zend-framework - Zend_Session と Zend_Oauth を組み合わせる方法
Zend_Auth と Zend_Session に問題があります。最近、ブートストラップ ファイルをモジュラー ブートストラップに分割しました。それ以来、Zend_Auth を使用してログインするたびに、セッションが既に開始されているというエラーが表示されます。そこで、Zend_Auth 名前空間を「DC_Auth」に変更しました。今、いくつかのエラーが発生しています。
見つからない Proxy ファイル (Doctrine 2 用) は、実際には application/proxies/User_Model_ProfileProxy.php にあります。
これ以上情報が必要な場合はお知らせください。
編集: 追記: index.php でブートストラップを実行する前に Zend_Session::start() を配置することで、zend セッションの問題を停止できます。しかし、そうすると、ユーザー モジュール オブジェクトが読み込まれる前にセッションが開始されるため、Zend_Auth ID は最終的に PHP_Incomplete_Object になります。
ありがとう
zend-framework - zendセッションテーブル、標準のものの横にuser_idを保存する方法は?
私はhttp://framework.zend.com/manual/en/zend.session.savehandler.dbtable.htmlを使用しています。
問題は、ユーザーを削除するときに、ログアウトするためにそのユーザーのセッションを削除したいのですが、彼のセッションが何であるかわからないということです...
zendセッションテーブルオプションにカスタム列を追加して、ユーザーのIDを保存する方法が見つかりません
zend-framework - Zend_Session_Namespace から読み取るときにすべてのクラスを含めますか?
セッションには、「グローバル」と「ユーザー」の 2 つの名前空間があります。
「グローバル」にはいくつかの設定があり、「ユーザー」には正しく保存されていると思われるシリアル化されたユーザーオブジェクトがあります:(これはセッションファイルからのものです)
グローバル|a:16:{ [...] s:12:"last_request";i:1301390173; [...] }
user|a:1:{ s:10:"userObject";O:16:"currentUserModel":24:{ [...] s:10:"*_roleId";s:7:"premium"; [...] } }
私がこれを行うとき:
$sess = new Zend_Session_Namespace('global');
「currentUserModel.php」をインクルードするとエラーが発生しますが、この時点ではユーザー オブジェクトが必要ないため、これは望ましくありません。「グローバル」名前空間を取得するだけです。
問題は次のとおりです。すべての名前空間に格納されているすべてのオブジェクトのすべてのクラスを含める必要がありますか?それとも、アクセスしている名前空間にあるオブジェクトのクラスだけを含めることは可能ですか?
前もって感謝します
php - Zend_Session 例外を引き起こす PHPUnit 出力
次のようなエラーが多数発生しています。
アプリケーションのテスト スイートを実行するとき。これは、PHPUnit 3.5.10 および PHP 5.3.5 で発生します。
これを引き起こしている不思議で予期しない空白の出力はありません。「ブラウザーに送信される出力」は、実行されている PHPUnit テストからの実際の出力であると判断しました。PHPUnit/Util/Printer.php を開き、(PHPUnit からの出力の最初の行を実質的に停止する) で行をラップするとprint $buffer
、if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false)
最初のテストが成功します (テスト ケースがテストが成功したことを示すドットを出力するまで、次のドットが出力されたため、テストは失敗します)。
私のチームの別の開発者は、完全なテスト スイートを正常に実行できるため、アプリケーション コードの問題ではないことがわかっています。構成設定またはローカル環境の問題である必要があります。
私はすでにphp.iniをチェックして、それoutput_buffering
がオンになってimplicit_flush
いてオフになっていることを確認しました。
テストブートストラップにも追加しようとしましZend_Session::$_unitTestEnabled = true;
たが、それは役に立ちませんでした (別の開発者のマシンとそれなしの CI サーバーで動作するため、とにかく必要ではないはずです)。
エラーを無視する以外に何か提案はありますか? 私はこのようなものを見たことがなく、本当に途方に暮れています。
ありがとう!
アップデート:
問題をさらに特定するために、次のテスト スクリプトを実行して、ZF とアプリケーションを方程式から外しました。
テストは失敗します:
ただし、まったく同じテストが友人のマシンで機能します。PHP と PHPUnit の同じバージョン。