Session活用法 買い物かご セッションに値を入れる

ショッピングカートのスクリプトを用いて、セッションの活用法を説明します。

ショッピングカートは注文した商品の商品情報とその個数を記憶しておかなければいけません。そこで、セッションを用いて、常に客が注文した商品情報を保持しておきます。

保持する項目は2つです。
1つは、商品を特定できるユニークな番号。商品ID。
もう1つは、その商品を注文した数、個数。
です。この2つは対になっていないといけません。

イメージとしてこのような感じです。
  商品ID 個数
注文商品1つ目 1234 1
2つ目 1235 2
3つ目 1236 1

さてこのイメージを変数のイメージに当てはめていきましょう。
  商品ID 個数
注文商品1つ目 Session_Shohin1 Session_Kosu1
2つ目 Session_Shohin2 Session_Kosu2
3つ目 Session_Shohin3 Session_Kosu3

変数の中身は
Session_Shohin1=1234
Session_Shohin2=1235
Session_Kosu1=1
な、イメージです。

セッションも変数の一部なので、書き方は違いますが、考え方は同じです。

さて、客の注文数があらかじめ分かっていれば、「商品IDのセッションは3つ用意しとけばいいな」てな具合に用意できるのですが、ショッピングカートなので、どのくらい注文されるのか分かりません。なので、事前にセッション変数を用意しておくことができないので、客が「ショッピングカートにいれる」ボタンを押してからセッション変数を用意することになります。

考え方として、sessionの1に値が入っていたら2に入れる、2に入っていたら3に入れる・・・・というような感じです。
今回のサンプルは商品IDと個数の2つを入れておかなければいけないので、こうしましょう
  商品ID 個数
セッション項目1つ目 a
2つ目 aa
3つ目 aaa

商品IDの方は1,2,3,4と1ずつ足されていき、個数の方はa,aa,aaa,aaaaとaが1つずつ増えていきます。
これは同じセッション変数に2種類の値を入れることができないためです。

サンプルに入りましょう。以下のような商品注文ページがあり、そこで「買い物かごにいれる」ボタンを押すと、セッション変数に値が入ります。



「買い物かごに入れる」ボタンを押した先のスクリプトがこちら


String id = request.getParameter("id"); //---------------商品ID
String kosu = request.getParameter("kosu"); //---------------個数
String butu_no = "1"; //---------------商品IDのセッション名
int butu_no_int = 0;
String cart_value = "";
String se_kosu = "a"; //---------------個数のセッション名
 
cart_value = (String)session.getAttribute( butu_no );
while( cart_value != null ){ //---------------A
 
 butu_no_int = Integer.parseInt( butu_no );
 butu_no_int++;
 se_kosu = se_kosu + "a";
 butu_no = Integer.toString( butu_no_int );
 cart_value = (String)session.getAttribute( butu_no );

}
session.setAttribute( butu_no , id ); //---------------B
session.setAttribute( se_kosu, kosu);
 

//---------------A
の部分で、
session.getAttribute(”1”)
から順に1ずつ増やしていき、空になるまでループしています。

//---------------B
の部分で、セッションに代入しています。

Aの中で、商品IDを文字列にしたり、数値にしたりしていますが、これは、1ずつ増やしていくときに、文字列だと1+1=11になってしまうのを防ぐのと、セッションに入れるときに文字列でないと代入が出来ないというのがあるためです。

これで以下のようにセッションの中に値を入れることができました。
  商品ID 個数
注文商品1つ目 session.getAttribute(”1”) session.getAttribute(”a”)
2つ目 session.getAttribute(”2”) session.getAttribute(”aa”)
3つ目 session.getAttribute(”3”) session.getAttribute("aaa”)
このページの一番上の表と対応しています。
session.getAttribute(”1”) = "1234" session.getAttribute(”a”) = "1"
session.getAttribute(”2”) = "1235" session.getAttribute(”aa”) = "2"
session.getAttribute(”3”) = "1236" session.getAttribute("aaa”) = "1"

次回は買い物かごの表示のしかたです。