こんにちは、私はjavaサーブレットを初めて使用しています。私はクッキーを使用して簡単なショッピングカートの問題を実装しようとしていた。私のウェブページでは、カートに追加できる商品名を入力するように求めています。クッキーに2つ以上の値を追加することはできません
Webページ: シンプルなテキスト入力(製品名) とボタン(カートに追加)
ボタンをクリックすると、Webページには、カートの値が表示されます。
奇妙な問題が発生しています。 3つ以下の値で正常に動作します。 3番目の値を追加しようとすると、最後に追加された2つの値しか表示されません。たとえば、商品a、b、cをそれぞれ追加するとします。 bとcのみが表示されます。
カートサーブレットコード:
String name = request.getParameter("productname");
Cookie cookie = new Cookie("product", name);
cookie.setMaxAge(100 * 60);
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
List<String> names = new ArrayList<String>();
names.add(name);
if (cookies != null) {
for (Cookie c: cookies) {
if (c.getName().equals("product")) {
names.add(c.getValue());
}
}
}
PrintWriter writer = response.getWriter();
for (String item: names) {
writer.println("<h4>" + item + "</h4>");
}
のindex.jsp:
<form method="post" action="Cart">
<input type="text" name="productname" value="Product name">
<input type="submit" value="AddToCart">
</form>
私はそれで間違っているかを把握するために非常に多くの時間を費やしています。私はこの奇妙な行動を説明するための間違いを見つけることができませんでした。助けてください。
@ f1I2これは、商品がカートに追加されるたびに別の名前を使用する必要があることを意味しますか? – assasinC
実際、私はウェブサイトがショッピングカートをどのように実装しているのだろうと思っていますか? httpセッションを使用すると、ブラウザが閉じられると失われます。だからこそ、私はクッキーを使って長く滞在できるようにしています。しかし、クッキーにはこの容量の問題があります.Oracleのドキュメントでは、各WebサーバーでサポートされるCookieは20個だと言います。これは、その非常に貴重なリソースを使用することを意味します。 – assasinC
@assasinCセッション自体は、ブラウザが開いている限り、デフォルトで存続するクッキーによって識別されます。基本的には、このデフォルトのCookieより長く存続するセッションCookieが必要です。この[記事](https://stackoverflow.com/questions/3693180/session-lost-when-closing-the-browser)では、これを行う方法について説明しています。 – f1l2