3

私はセッション変数にかなり依存するPHPアプリケーションを持っています。ログイン後、ユーザーは、ユーザーが誰であるかに応じてセッション変数のロードを設定するコードを実行するページにリダイレクトされます。アプリケーションはさまざまなソースからのデータを使用しており、セッションはデータベースを照会するためのID番号を格納するために使用されます。

したがって、ユーザーが資産管理システムにクエリを実行するページに移動すると、その特定のデータベースのIDがセッションを介して呼び出されます。

最近、セッション変数に関して多くの問題が発生しました。アプリの存続期間中に1つのセッションファイルのみが作成される場合もあれば、各セッションリクエストによって新しいセッションIDが生成される場合もあります(理由を特定できていない場合もあります)。

私の質問はこれです。これにセッション変数を使用する代わりの方法はありますか?グローバルまたは他の方法のように?

ここで私のセッションの問題について質問があります-PHPセッション変数が維持されていません

4

7 に答える 7

4

もう1つの方法は、セッションデータをデータベースに保存して、ユーザーにsession_idを含むCookieを提供することです。これにより、セッションをより細かく制御できるようになります。

于 2010-12-22T09:43:48.387 に答える
2

いいえ、各ユーザーセッションには1つの値が必要なので、何らかのセッションメカニズムが必要です。そして、PHPのセッションはそれで問題ありません。おそらく、ニーズを満たすために適切に構成する必要があります。

于 2010-12-22T09:40:14.513 に答える
2

他の「セッション」ソリューションを使用することもできますが、その場合は、より多くの配管を行う必要があります。

たとえば、サイトが生成するすべてのURLにセッションIDが含まれるURLベースのセッションを使用できます。これは通常、サイトの主要な再設計であり、必要なのは、複数のドメインで同じセッションを実行する必要がある場合、または同じコンピューターでブラウザーの異なるウィンドウで異なるセッションを実行する場合のみです。

しかし、あなたの場合、セッションが壊れている理由、おそらく構成の問題、またはセッションファイルを台無しにする何かがあるかどうかを確認します。

PHPセッションで問題が発生したことは一度もありません。PHPセッションは機能します;)

于 2010-12-22T09:44:48.990 に答える
1

セッションの代わりにCookieがあります(実際、セッションは通常Cookieを使用して実装されます)。ただし、Cookieは、少量のデータを保存する場合にのみ使用する必要があります。

于 2010-12-22T09:37:54.890 に答える
0

セッションはこれに対する正しい解決策のようです。通常、セッションは次のように機能します。セッションオブジェクトがサーバー上に作成され、IDが割り当てられます。IDはCookieでブラウザに送信され、ブラウザの要求とと​​もにサーバーに送信されるため、サーバーはメモリから正しいセッションオブジェクトをフェッチできます。

セッションがどのように構成されているかを確認することをお勧めします。セッションを「失い」続ける場合、考えられる原因の1つは、サブドメイン間で「ジャンプ」していて、セッションCookieが1つのサブドメインにのみ設定されていることです。もう1つの原因は、セッションの有効期限が短すぎることです。

于 2010-12-22T09:47:36.750 に答える
0

Cookieは、ユーザーが変更できるため、特にログインに使用する場合は、実際には代替手段ではありませんが、セッションの場合、識別ハッシュを含むCookieをコンピューターに保存するだけで、変更してもそれほど遠くはありません。

とにかく、セッションは機能します。あなたの問題は、間違いなく、実装の問題です。別の方法を実装すると、コードが非常に複雑になるため、デバッグとテストに時間をかけることをお勧めします。セッションによってすでに問題が発生しているため、実行したくない場合もあります。

于 2010-12-22T09:51:24.390 に答える
0

リクエストごとに再作成されるセッションでは、サーバーから送信されるCookieのデバッグを試みる必要があります。これらのCookieで、Cookieドメインが正しいものであることを確認します(Cookieパスも確認します)。

Cookieをデバッグするには、Web開発者ツールバーを使用して、ページの読み込み後にアクティブになっているCookieを表示できます。しかし、最良のツールはLive Httpヘッダーです。サーバーから送信された実際のヘッダーを確認すると、実際のCookieコンテンツが見つかり、Cookieドメインに不一致がある場合(たとえば、ほとんどの場合はそれです)、ブラウザーが見つかります。あなたのウェブサイトのためにこのクッキーを保存しません。

ブラウザがCookieを無視する場合、PHPに要求する次のページは別のセッションを構築します。

Cookiシステムを機能させることができない場合は、PHPで永続的なgetおよび/またはpostパラメーターを使用していたPHPのセッションIDを追跡する古い方法を追跡できます。PHPコンパイルで--enable-rans-idが必要です(phpinfoページで確認してください)http://www.php.net/manual/en/session.idpassing.php

于 2010-12-22T09:55:30.610 に答える