私は現在、ショッピングカートを維持する必要がある PHP のアプリケーションを使用しています。すべてがうまくいっています。
カートにアイテムが追加されると、カートに1つのアイテムが含まれている場合、各ページのヘッダーに「ショッピングバスケットに1つのアイテム」のようなメッセージを表示する必要があります。
追加のアイテムが追加 (または削除) されると、 「ショッピング バスケットに 2 つのアイテムが入っています」などのように、ページを更新せずにそれに応じてメッセージが変更されます。
私が直面している問題は、一部のアイテムがカートに追加または削除されたときにページを更新する必要があることです (その後、ページのヘッダーに更新されたアイテムが表示されます)
たとえば、カートに現在 2 つのアイテムが入っていて、さらに 1 つのアイテムが追加されたとします。ヘッダーのメッセージには、「ショッピング バスケットに 3 つのアイテムが入っています」と表示される代わりに、「ショッピングバスケットに 2 つのアイテムが入っています」と表示されます。ページが更新されます。
Java では、SessionListener
次のようになります。
package sessionListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener()
public class SessionListener implements HttpSessionListener
{
private HttpSession session=null;
@Override
public void sessionCreated(HttpSessionEvent se)
{
session=se.getSession();
//Use this session
}
@Override
public void sessionDestroyed(HttpSessionEvent se)
{
}
}
sessionCreated()
セッションが最初に作成されたときに一度だけ実行されるメソッドであるため、要件に合わせてメソッドを使用できたはずです。
同様に、.NET には、次のような Global.asax アプリケーション ファイルがあります。
<%@ Application Language="C#" %>
<script runat="server">
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Session.Add("Message", SomeValue);
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
Session.Abandon();
}
</script>
void Session_Start(object sender, EventArgs e)
このメソッドは、セッションの開始時に 1 回 (ユーザーのセッションごとに 1 回) だけ呼び出されるため、要件に合わせてこのメソッドを使用することもできました。
しかし、PHP では、新しいセッションが作成されたときに一度だけ実行される同様の概念を見つけることができません (現在、PHP でフレームワークを使用していません)。
もしそうなら、ページをまったく更新せずにショッピングカートのステータスが更新されたときに、各ページのヘッダーに上記のメッセージを表示するにはどうすればよいですか?